From 5095464623bbe1c3e5bbaca994b2c1ec528a2d37 Mon Sep 17 00:00:00 2001 From: "Martin@qingcloud" Date: Thu, 17 Aug 2017 18:58:03 +0800 Subject: [PATCH] Refactor plugin (#17) update deps update build script add version.go fix parameter type changes in hostnic and utils. --- .gitignore | 67 +- .travis.yml | 4 +- Makefile | 68 + {hostnic => cmd/hostnic}/hostnic.go | 10 +- {tools => cmd}/niccleaner/main.go | 0 generate_version.sh | 140 + glide.lock | 56 + glide.yaml | 27 + pkg/util.go | 4 +- pkg/version.go | 6 + release | 2 +- .../containernetworking/cni/.gitignore | 5 + .../containernetworking/cni/.travis.yml | 41 + .../cni/CODE-OF-CONDUCT.md | 4 + .../containernetworking/cni/CONVENTIONS.md | 10 +- .../cni/Documentation/host-local.md | 82 - .../cni/Godeps/Godeps.json | 36 +- .../containernetworking/cni/README.md | 46 +- .../containernetworking/cni/RELEASING.md | 34 + .../containernetworking/cni/Vagrantfile | 14 +- .../containernetworking/cni/build.sh | 2 +- .../containernetworking/cni/cnitool/cni.go | 32 +- .../cni/libcni/api_test.go | 577 +++ .../libcni/backwards_compatibility_test.go | 79 + .../cni/libcni/conf_test.go | 431 ++ .../cni/libcni/libcni_suite_test.go | 65 + .../containernetworking/cni/logo.png | Bin 0 -> 11604 bytes .../cni/pkg/invoke/args.go | 17 +- .../cni/pkg/invoke/args_test.go | 60 + .../cni/pkg/invoke/delegate_test.go | 156 + .../cni/pkg/invoke/exec_test.go | 157 + .../cni/pkg/invoke/find_test.go | 103 + .../invoke/get_version_integration_test.go | 107 + .../cni/pkg/invoke/invoke_suite_test.go | 45 + .../cni/pkg/invoke/raw_exec.go | 8 +- .../cni/pkg/invoke/raw_exec_test.go | 123 + .../cni/pkg/skel/skel_suite_test.go | 27 + .../cni/pkg/skel/skel_test.go | 361 ++ .../cni/pkg/types/020/types_suite_test.go | 27 + .../cni/pkg/types/020/types_test.go | 130 + .../containernetworking/cni/pkg/types/args.go | 15 +- .../cni/pkg/types/args_test.go | 132 + .../cni/pkg/types/current/types.go | 24 +- .../cni/pkg/types/current/types_suite_test.go | 27 + .../cni/pkg/types/current/types_test.go | 252 ++ .../cni/pkg/types/types.go | 6 +- .../cni/pkg/types/types_suite_test.go | 27 + .../cni/pkg/version/conf_test.go | 69 + .../legacy_examples/example_runtime.go | 161 +- .../legacy_examples_suite_test.go | 27 + .../legacy_examples/legacy_examples_test.go | 36 + .../cni/pkg/version/plugin_test.go | 85 + .../cni/pkg/version/reconcile_test.go | 51 + .../testhelpers/testhelpers_suite_test.go | 27 + .../version/testhelpers/testhelpers_test.go | 106 + .../cni/pkg/version/version_suite_test.go | 27 + .../host-local/backend/allocator/allocator.go | 277 -- .../host-local/backend/allocator/config.go | 84 - .../cni/plugins/ipam/host-local/main.go | 86 - .../cni/plugins/test/noop/noop_suite_test.go | 45 + .../cni/plugins/test/noop/noop_test.go | 244 ++ .../cni/scripts/release-with-rkt.sh | 50 - .../cni/scripts/release.sh | 36 + .../containernetworking/cni/test.sh | 6 +- .../vendor/github.com/onsi/ginkgo/.gitignore | 4 + .../vendor/github.com/onsi/ginkgo/.travis.yml | 15 + .../vendor/github.com/onsi/gomega/.gitignore | 3 + .../vendor/github.com/onsi/gomega/.travis.yml | 11 + .../containernetworking/plugins/.gitignore | 28 + .../containernetworking/plugins/.travis.yml | 34 + .../plugins/CONTRIBUTING.md | 134 + .../plugins/Godeps/Godeps.json | 238 ++ .../containernetworking/plugins/Godeps/Readme | 5 + .../containernetworking/plugins/LICENSE | 201 + .../containernetworking/plugins/README.md | 25 + .../containernetworking/plugins/RELEASING.md | 35 + .../containernetworking/plugins/Vagrantfile | 21 + .../containernetworking/plugins/build.sh | 35 + .../plugins/pkg/ip/addr.go | 68 + .../{cni => plugins}/pkg/ip/cidr.go | 10 + .../plugins/pkg/ip/ip_suite_test.go | 27 + .../plugins/pkg/ip/ipforward.go | 55 + .../{cni => plugins}/pkg/ip/ipmasq.go | 38 +- .../{cni => plugins}/pkg/ip/link.go | 4 +- .../plugins/pkg/ip/link_test.go | 273 ++ .../{cni => plugins}/pkg/ip/route.go | 0 .../{cni => plugins}/pkg/ip/route_linux.go | 0 .../pkg/ip/route_unspecified.go | 0 .../{cni => plugins}/pkg/ipam/ipam.go | 10 +- .../plugins/pkg/ipam/ipam_suite_test.go | 27 + .../plugins/pkg/ipam/ipam_test.go | 299 ++ .../{cni => plugins}/pkg/ns/README.md | 8 +- .../{cni => plugins}/pkg/ns/ns.go | 0 .../{cni => plugins}/pkg/ns/ns_linux.go | 2 +- .../plugins/pkg/ns/ns_suite_test.go | 34 + .../plugins/pkg/ns/ns_test.go | 252 ++ .../{cni => plugins}/pkg/ns/ns_unspecified.go | 0 .../pkg/testutils/bad_reader.go | 0 .../{cni => plugins}/pkg/testutils/cmd.go | 0 .../plugins/pkg/testutils/ping.go | 55 + .../pkg/utils/hwaddr/hwaddr.go | 0 .../pkg/utils/hwaddr/hwaddr_suite_test.go | 27 + .../plugins/pkg/utils/hwaddr/hwaddr_test.go | 74 + .../pkg/utils/sysctl/sysctl_linux.go | 0 .../{cni => plugins}/pkg/utils/utils.go | 0 .../plugins/pkg/utils/utils_suite_test.go | 27 + .../plugins/pkg/utils/utils_test.go | 51 + .../plugins/ipam/dhcp/README.md} | 5 +- .../plugins/ipam/dhcp/daemon.go | 18 +- .../plugins/ipam/dhcp/lease.go | 2 +- .../plugins/ipam/dhcp/main.go | 12 +- .../plugins/ipam/dhcp/options.go | 0 .../plugins/plugins/ipam/dhcp/options_test.go | 75 + .../plugins/plugins/ipam/host-local/README.md | 138 + .../host-local/backend/allocator/allocator.go | 217 + .../backend/allocator/allocator_suite_test.go | 27 + .../backend/allocator/allocator_test.go | 333 ++ .../host-local/backend/allocator/config.go | 151 + .../backend/allocator/config_test.go | 365 ++ .../host-local/backend/allocator/range.go | 164 + .../host-local/backend/allocator/range_set.go | 97 + .../backend/allocator/range_set_test.go | 70 + .../backend/allocator/range_test.go | 209 + .../ipam/host-local/backend/disk/backend.go | 16 +- .../ipam/host-local/backend/disk/lock.go | 0 .../plugins/ipam/host-local/backend/store.go | 4 +- .../host-local/backend/testing/fake_store.go | 25 +- .../plugins/ipam/host-local/dns.go | 0 .../plugins/ipam/host-local/dns_test.go | 80 + .../ipam/host-local/host_local_suite_test.go | 27 + .../ipam/host-local/host_local_test.go | 528 +++ .../plugins/plugins/ipam/host-local/main.go | 140 + .../plugins/main/bridge/README.md} | 1 + .../plugins/main/bridge/bridge.go | 232 +- .../plugins/main/bridge/bridge_suite_test.go | 27 + .../plugins/main/bridge/bridge_test.go | 895 ++++ .../plugins/main/ipvlan/README.md} | 0 .../plugins/main/ipvlan/ipvlan.go | 8 +- .../plugins/main/ipvlan/ipvlan_suite_test.go | 27 + .../plugins/main/ipvlan/ipvlan_test.go | 227 ++ .../plugins/main/loopback/loopback.go | 2 +- .../main/loopback/loopback_suite_test.go | 41 + .../plugins/main/loopback/loopback_test.go | 100 + .../plugins/main/macvlan/README.md} | 0 .../plugins/main/macvlan/macvlan.go | 41 +- .../main/macvlan/macvlan_suite_test.go | 27 + .../plugins/main/macvlan/macvlan_test.go | 226 + .../plugins/main/ptp/README.md} | 2 +- .../{cni => plugins}/plugins/main/ptp/ptp.go | 68 +- .../plugins/main/ptp/ptp_suite_test.go | 27 + .../plugins/plugins/main/ptp/ptp_test.go | 205 + .../plugins/plugins/main/vlan/vlan.go | 197 + .../plugins/main/vlan/vlan_suite_test.go | 27 + .../plugins/plugins/main/vlan/vlan_test.go | 237 ++ .../plugins/meta/flannel/README.md} | 0 .../plugins/meta/flannel/flannel.go | 3 + .../meta/flannel/flannel_suite_test.go} | 21 +- .../plugins/meta/flannel/flannel_test.go | 216 + .../plugins/plugins/meta/portmap/README.md | 117 + .../plugins/plugins/meta/portmap/chain.go | 127 + .../plugins/meta/portmap/chain_test.go | 203 + .../plugins/plugins/meta/portmap/main.go | 186 + .../plugins/plugins/meta/portmap/portmap.go | 294 ++ .../meta/portmap/portmap_integ_test.go | 239 ++ .../meta/portmap/portmap_suite_test.go | 103 + .../plugins/meta/portmap/portmap_test.go | 258 ++ .../plugins/plugins/meta/portmap/utils.go | 67 + .../plugins/meta/tuning/README.md} | 0 .../plugins/meta/tuning/tuning.go | 43 +- .../plugins/meta/tuning/tuning_suite_test.go | 27 + .../plugins/meta/tuning/tuning_test.go | 112 + .../plugins/plugins/sample/README.md | 7 + .../plugins/plugins/sample/main.go | 145 + .../plugins/sample/sample_suite_test.go | 15 + .../plugins/plugins/sample/sample_test.go | 138 + .../plugins/scripts/release.sh | 36 + .../containernetworking/plugins/test.sh | 46 + .../github.com/coreos/go-iptables/LICENSE | 0 .../coreos/go-iptables/iptables/iptables.go | 158 +- .../coreos/go-iptables/iptables/lock.go | 0 .../github.com/coreos/go-systemd/LICENSE | 0 .../coreos/go-systemd/activation/files.go | 0 .../coreos/go-systemd/activation/listeners.go | 0 .../go-systemd/activation/packetconns.go | 0 .../vendor/github.com/d2g/dhcp4/LICENSE | 0 .../vendor/github.com/d2g/dhcp4/README.md | 0 .../vendor/github.com/d2g/dhcp4/constants.go | 0 .../vendor/github.com/d2g/dhcp4/helpers.go | 0 .../vendor/github.com/d2g/dhcp4/option.go | 0 .../vendor/github.com/d2g/dhcp4/packet.go | 0 .../vendor/github.com/d2g/dhcp4client/LICENSE | 0 .../github.com/d2g/dhcp4client/README.md | 0 .../github.com/d2g/dhcp4client/client.go | 0 .../github.com/d2g/dhcp4client/inetsock.go | 0 .../vendor/github.com/d2g/dhcp4client/init.go | 0 .../d2g/dhcp4client/pktsock_linux.go | 0 .../github.com/j-keck/arping/.gitignore | 1 + .../vendor/github.com/j-keck/arping/LICENSE | 22 + .../vendor/github.com/j-keck/arping/README.md | 29 + .../github.com/j-keck/arping/arp_datagram.go | 97 + .../vendor/github.com/j-keck/arping/arping.go | 197 + .../github.com/j-keck/arping/arping_bsd.go | 101 + .../github.com/j-keck/arping/arping_linux.go | 38 + .../j-keck/arping/arping_windows.go | 28 + .../github.com/j-keck/arping/netutils.go | 64 + .../mattn/go-shellwords/.travis.yml | 8 + .../github.com/mattn/go-shellwords/LICENSE | 21 + .../github.com/mattn/go-shellwords/README.md | 47 + .../mattn/go-shellwords/shellwords.go | 145 + .../mattn/go-shellwords/util_posix.go | 19 + .../mattn/go-shellwords/util_windows.go | 17 + .../vendor/github.com/onsi/ginkgo/.gitignore | 4 + .../vendor/github.com/onsi/ginkgo/.travis.yml | 15 + .../github.com/onsi/ginkgo/CHANGELOG.md | 136 + .../vendor/github.com}/onsi/ginkgo/LICENSE | 0 .../vendor/github.com/onsi/ginkgo/README.md | 115 + .../github.com/onsi/ginkgo/config/config.go | 170 + .../onsi/ginkgo/extensions/table/table.go | 98 + .../ginkgo/extensions/table/table_entry.go | 72 + .../github.com/onsi/ginkgo/ginkgo_dsl.go | 536 +++ .../internal/codelocation/code_location.go | 32 + .../internal/containernode/container_node.go | 151 + .../onsi/ginkgo/internal/failer/failer.go | 92 + .../ginkgo/internal/leafnodes/benchmarker.go | 95 + .../ginkgo/internal/leafnodes/interfaces.go | 19 + .../onsi/ginkgo/internal/leafnodes/it_node.go | 46 + .../ginkgo/internal/leafnodes/measure_node.go | 61 + .../onsi/ginkgo/internal/leafnodes/runner.go | 113 + .../ginkgo/internal/leafnodes/setup_nodes.go | 41 + .../ginkgo/internal/leafnodes/suite_nodes.go | 54 + .../synchronized_after_suite_node.go | 89 + .../synchronized_before_suite_node.go | 182 + .../onsi/ginkgo/internal/remote/aggregator.go | 250 ++ .../internal/remote/forwarding_reporter.go | 90 + .../internal/remote/output_interceptor.go | 10 + .../remote/output_interceptor_unix.go | 52 + .../internal/remote/output_interceptor_win.go | 33 + .../onsi/ginkgo/internal/remote/server.go | 204 + .../ginkgo/internal/spec/index_computer.go | 55 + .../onsi/ginkgo/internal/spec/spec.go | 197 + .../onsi/ginkgo/internal/spec/specs.go | 122 + .../ginkgo/internal/specrunner/random_id.go | 15 + .../ginkgo/internal/specrunner/spec_runner.go | 324 ++ .../onsi/ginkgo/internal/suite/suite.go | 171 + .../internal/testingtproxy/testing_t_proxy.go | 76 + .../ginkgo/internal/writer/fake_writer.go | 31 + .../onsi/ginkgo/internal/writer/writer.go | 71 + .../onsi/ginkgo/reporters/default_reporter.go | 83 + .../onsi/ginkgo/reporters/fake_reporter.go | 59 + .../onsi/ginkgo/reporters/junit_reporter.go | 139 + .../onsi/ginkgo/reporters/reporter.go | 15 + .../reporters/stenographer/console_logging.go | 64 + .../stenographer/fake_stenographer.go | 138 + .../reporters/stenographer/stenographer.go | 549 +++ .../ginkgo/reporters/teamcity_reporter.go | 92 + .../onsi/ginkgo/types/code_location.go | 15 + .../onsi/ginkgo/types/synchronization.go | 30 + .../github.com/onsi/ginkgo/types/types.go | 143 + .../vendor/github.com/onsi/gomega/.gitignore | 3 + .../vendor/github.com/onsi/gomega/.travis.yml | 11 + .../github.com/onsi/gomega/CHANGELOG.md | 70 + .../vendor/github.com}/onsi/gomega/LICENSE | 0 .../vendor/github.com/onsi/gomega/README.md | 17 + .../github.com/onsi/gomega/format/format.go | 276 ++ .../github.com/onsi/gomega/gbytes/buffer.go | 229 ++ .../onsi/gomega/gbytes/say_matcher.go | 105 + .../github.com/onsi/gomega/gexec/build.go | 78 + .../onsi/gomega/gexec/exit_matcher.go | 88 + .../onsi/gomega/gexec/prefixed_writer.go | 53 + .../github.com/onsi/gomega/gexec/session.go | 214 + .../github.com/onsi/gomega/gomega_dsl.go | 335 ++ .../gomega/internal/assertion/assertion.go | 98 + .../asyncassertion/async_assertion.go | 189 + .../internal/oraclematcher/oracle_matcher.go | 25 + .../testingtsupport/testing_t_support.go | 40 + .../vendor/github.com/onsi/gomega/matchers.go | 393 ++ .../github.com/onsi/gomega/matchers/and.go | 64 + .../matchers/assignable_to_type_of_matcher.go | 31 + .../onsi/gomega/matchers/be_a_directory.go | 54 + .../onsi/gomega/matchers/be_a_regular_file.go | 54 + .../gomega/matchers/be_an_existing_file.go | 38 + .../onsi/gomega/matchers/be_closed_matcher.go | 45 + .../onsi/gomega/matchers/be_empty_matcher.go | 26 + .../matchers/be_equivalent_to_matcher.go | 33 + .../onsi/gomega/matchers/be_false_matcher.go | 25 + .../onsi/gomega/matchers/be_nil_matcher.go | 18 + .../gomega/matchers/be_numerically_matcher.go | 119 + .../onsi/gomega/matchers/be_sent_matcher.go | 71 + .../gomega/matchers/be_temporally_matcher.go | 65 + .../onsi/gomega/matchers/be_true_matcher.go | 25 + .../onsi/gomega/matchers/be_zero_matcher.go | 27 + .../onsi/gomega/matchers/consist_of.go | 80 + .../matchers/contain_element_matcher.go | 56 + .../matchers/contain_substring_matcher.go | 37 + .../onsi/gomega/matchers/equal_matcher.go | 27 + .../onsi/gomega/matchers/have_key_matcher.go | 53 + .../matchers/have_key_with_value_matcher.go | 73 + .../onsi/gomega/matchers/have_len_matcher.go | 27 + .../gomega/matchers/have_occurred_matcher.go | 30 + .../gomega/matchers/have_prefix_matcher.go | 35 + .../gomega/matchers/have_suffix_matcher.go | 35 + .../gomega/matchers/match_error_matcher.go | 50 + .../gomega/matchers/match_json_matcher.go | 61 + .../gomega/matchers/match_regexp_matcher.go | 42 + .../github.com/onsi/gomega/matchers/not.go | 30 + .../github.com/onsi/gomega/matchers/or.go | 67 + .../onsi/gomega/matchers/panic_matcher.go | 42 + .../onsi/gomega/matchers/receive_matcher.go | 126 + .../onsi/gomega/matchers/succeed_matcher.go | 30 + .../goraph/bipartitegraph/bipartitegraph.go | 41 + .../bipartitegraph/bipartitegraphmatching.go | 161 + .../matchers/support/goraph/edge/edge.go | 61 + .../matchers/support/goraph/node/node.go | 7 + .../matchers/support/goraph/util/util.go | 7 + .../onsi/gomega/matchers/type_support.go | 165 + .../onsi/gomega/matchers/with_transform.go | 72 + .../github.com/onsi/gomega/types/types.go | 17 + .../github.com/vishvananda/netns/LICENSE | 192 + .../github.com/vishvananda/netns/README.md | 51 + .../github.com/vishvananda/netns/netns.go | 80 + .../vishvananda/netns/netns_linux.go | 222 + .../vishvananda/netns/netns_unspecified.go | 43 + .../vendor/golang.org/x/sys/AUTHORS | 0 .../vendor/golang.org/x/sys/CONTRIBUTORS | 0 .../vendor/golang.org/x/sys/LICENSE | 0 .../vendor/golang.org/x/sys/PATENTS | 0 .../vendor/golang.org/x/sys/unix/.gitignore | 1 + .../vendor/golang.org/x/sys/unix/asm.s | 0 .../golang.org/x/sys/unix/asm_darwin_386.s | 0 .../golang.org/x/sys/unix/asm_darwin_amd64.s | 0 .../golang.org/x/sys/unix/asm_darwin_arm.s | 0 .../golang.org/x/sys/unix/asm_darwin_arm64.s | 0 .../x/sys/unix/asm_dragonfly_amd64.s | 0 .../golang.org/x/sys/unix/asm_freebsd_386.s | 0 .../golang.org/x/sys/unix/asm_freebsd_amd64.s | 0 .../golang.org/x/sys/unix/asm_freebsd_arm.s | 0 .../golang.org/x/sys/unix/asm_linux_386.s | 0 .../golang.org/x/sys/unix/asm_linux_amd64.s | 0 .../golang.org/x/sys/unix/asm_linux_arm.s | 0 .../golang.org/x/sys/unix/asm_linux_arm64.s | 0 .../golang.org/x/sys/unix/asm_linux_mips64x.s | 0 .../golang.org/x/sys/unix/asm_linux_ppc64x.s | 0 .../golang.org/x/sys/unix/asm_linux_s390x.s | 0 .../golang.org/x/sys/unix/asm_netbsd_386.s | 0 .../golang.org/x/sys/unix/asm_netbsd_amd64.s | 0 .../golang.org/x/sys/unix/asm_netbsd_arm.s | 0 .../golang.org/x/sys/unix/asm_openbsd_386.s | 0 .../golang.org/x/sys/unix/asm_openbsd_amd64.s | 0 .../golang.org/x/sys/unix/asm_solaris_amd64.s | 0 .../golang.org/x/sys/unix/bluetooth_linux.go | 0 .../vendor/golang.org/x/sys/unix/constants.go | 0 .../vendor/golang.org/x/sys/unix/env_unix.go | 0 .../vendor/golang.org/x/sys/unix/env_unset.go | 0 .../vendor/golang.org/x/sys/unix/flock.go | 0 .../x/sys/unix/flock_linux_32bit.go | 0 .../vendor/golang.org/x/sys/unix/gccgo.go | 0 .../vendor/golang.org/x/sys/unix/gccgo_c.c | 0 .../x/sys/unix/gccgo_linux_amd64.go | 0 .../vendor/golang.org/x/sys/unix/mkall.sh | 0 .../vendor/golang.org/x/sys/unix/mkerrors.sh | 0 .../vendor/golang.org/x/sys/unix/mkpost.go | 0 .../vendor/golang.org/x/sys/unix/mksyscall.pl | 0 .../x/sys/unix/mksyscall_solaris.pl | 0 .../golang.org/x/sys/unix/mksysctl_openbsd.pl | 0 .../golang.org/x/sys/unix/mksysnum_darwin.pl | 0 .../x/sys/unix/mksysnum_dragonfly.pl | 0 .../golang.org/x/sys/unix/mksysnum_freebsd.pl | 0 .../golang.org/x/sys/unix/mksysnum_linux.pl | 0 .../golang.org/x/sys/unix/mksysnum_netbsd.pl | 0 .../golang.org/x/sys/unix/mksysnum_openbsd.pl | 0 .../vendor/golang.org/x/sys/unix/race.go | 0 .../vendor/golang.org/x/sys/unix/race0.go | 0 .../golang.org/x/sys/unix/sockcmsg_linux.go | 0 .../golang.org/x/sys/unix/sockcmsg_unix.go | 0 .../vendor/golang.org/x/sys/unix/str.go | 0 .../vendor/golang.org/x/sys/unix/syscall.go | 0 .../golang.org/x/sys/unix/syscall_bsd.go | 0 .../golang.org/x/sys/unix/syscall_darwin.go | 0 .../x/sys/unix/syscall_darwin_386.go | 0 .../x/sys/unix/syscall_darwin_amd64.go | 0 .../x/sys/unix/syscall_darwin_arm.go | 0 .../x/sys/unix/syscall_darwin_arm64.go | 0 .../x/sys/unix/syscall_dragonfly.go | 0 .../x/sys/unix/syscall_dragonfly_amd64.go | 0 .../golang.org/x/sys/unix/syscall_freebsd.go | 0 .../x/sys/unix/syscall_freebsd_386.go | 0 .../x/sys/unix/syscall_freebsd_amd64.go | 0 .../x/sys/unix/syscall_freebsd_arm.go | 0 .../golang.org/x/sys/unix/syscall_linux.go | 0 .../x/sys/unix/syscall_linux_386.go | 0 .../x/sys/unix/syscall_linux_amd64.go | 0 .../x/sys/unix/syscall_linux_arm.go | 0 .../x/sys/unix/syscall_linux_arm64.go | 0 .../x/sys/unix/syscall_linux_mips64x.go | 0 .../x/sys/unix/syscall_linux_ppc64x.go | 0 .../x/sys/unix/syscall_linux_s390x.go | 0 .../golang.org/x/sys/unix/syscall_netbsd.go | 0 .../x/sys/unix/syscall_netbsd_386.go | 0 .../x/sys/unix/syscall_netbsd_amd64.go | 0 .../x/sys/unix/syscall_netbsd_arm.go | 0 .../golang.org/x/sys/unix/syscall_no_getwd.go | 0 .../golang.org/x/sys/unix/syscall_openbsd.go | 0 .../x/sys/unix/syscall_openbsd_386.go | 0 .../x/sys/unix/syscall_openbsd_amd64.go | 0 .../golang.org/x/sys/unix/syscall_solaris.go | 0 .../x/sys/unix/syscall_solaris_amd64.go | 0 .../golang.org/x/sys/unix/syscall_unix.go | 0 .../golang.org/x/sys/unix/types_darwin.go | 0 .../golang.org/x/sys/unix/types_dragonfly.go | 0 .../golang.org/x/sys/unix/types_freebsd.go | 0 .../golang.org/x/sys/unix/types_linux.go | 0 .../golang.org/x/sys/unix/types_netbsd.go | 0 .../golang.org/x/sys/unix/types_openbsd.go | 0 .../golang.org/x/sys/unix/types_solaris.go | 0 .../x/sys/unix/zerrors_darwin_386.go | 0 .../x/sys/unix/zerrors_darwin_amd64.go | 0 .../x/sys/unix/zerrors_darwin_arm.go | 0 .../x/sys/unix/zerrors_darwin_arm64.go | 0 .../x/sys/unix/zerrors_dragonfly_amd64.go | 0 .../x/sys/unix/zerrors_freebsd_386.go | 0 .../x/sys/unix/zerrors_freebsd_amd64.go | 0 .../x/sys/unix/zerrors_freebsd_arm.go | 0 .../x/sys/unix/zerrors_linux_386.go | 0 .../x/sys/unix/zerrors_linux_amd64.go | 0 .../x/sys/unix/zerrors_linux_arm.go | 0 .../x/sys/unix/zerrors_linux_arm64.go | 0 .../x/sys/unix/zerrors_linux_mips64.go | 0 .../x/sys/unix/zerrors_linux_mips64le.go | 0 .../x/sys/unix/zerrors_linux_ppc64.go | 0 .../x/sys/unix/zerrors_linux_ppc64le.go | 0 .../x/sys/unix/zerrors_linux_s390x.go | 0 .../x/sys/unix/zerrors_netbsd_386.go | 0 .../x/sys/unix/zerrors_netbsd_amd64.go | 0 .../x/sys/unix/zerrors_netbsd_arm.go | 0 .../x/sys/unix/zerrors_openbsd_386.go | 0 .../x/sys/unix/zerrors_openbsd_amd64.go | 0 .../x/sys/unix/zerrors_solaris_amd64.go | 0 .../x/sys/unix/zsyscall_darwin_386.go | 0 .../x/sys/unix/zsyscall_darwin_amd64.go | 0 .../x/sys/unix/zsyscall_darwin_arm.go | 0 .../x/sys/unix/zsyscall_darwin_arm64.go | 0 .../x/sys/unix/zsyscall_dragonfly_amd64.go | 0 .../x/sys/unix/zsyscall_freebsd_386.go | 0 .../x/sys/unix/zsyscall_freebsd_amd64.go | 0 .../x/sys/unix/zsyscall_freebsd_arm.go | 0 .../x/sys/unix/zsyscall_linux_386.go | 0 .../x/sys/unix/zsyscall_linux_amd64.go | 0 .../x/sys/unix/zsyscall_linux_arm.go | 0 .../x/sys/unix/zsyscall_linux_arm64.go | 0 .../x/sys/unix/zsyscall_linux_mips64.go | 0 .../x/sys/unix/zsyscall_linux_mips64le.go | 0 .../x/sys/unix/zsyscall_linux_ppc64.go | 0 .../x/sys/unix/zsyscall_linux_ppc64le.go | 0 .../x/sys/unix/zsyscall_linux_s390x.go | 0 .../x/sys/unix/zsyscall_netbsd_386.go | 0 .../x/sys/unix/zsyscall_netbsd_amd64.go | 0 .../x/sys/unix/zsyscall_netbsd_arm.go | 0 .../x/sys/unix/zsyscall_openbsd_386.go | 0 .../x/sys/unix/zsyscall_openbsd_amd64.go | 0 .../x/sys/unix/zsyscall_solaris_amd64.go | 0 .../golang.org/x/sys/unix/zsysctl_openbsd.go | 0 .../x/sys/unix/zsysnum_darwin_386.go | 0 .../x/sys/unix/zsysnum_darwin_amd64.go | 0 .../x/sys/unix/zsysnum_darwin_arm.go | 0 .../x/sys/unix/zsysnum_darwin_arm64.go | 0 .../x/sys/unix/zsysnum_dragonfly_amd64.go | 0 .../x/sys/unix/zsysnum_freebsd_386.go | 0 .../x/sys/unix/zsysnum_freebsd_amd64.go | 0 .../x/sys/unix/zsysnum_freebsd_arm.go | 0 .../x/sys/unix/zsysnum_linux_386.go | 0 .../x/sys/unix/zsysnum_linux_amd64.go | 0 .../x/sys/unix/zsysnum_linux_arm.go | 0 .../x/sys/unix/zsysnum_linux_arm64.go | 0 .../x/sys/unix/zsysnum_linux_mips64.go | 0 .../x/sys/unix/zsysnum_linux_mips64le.go | 0 .../x/sys/unix/zsysnum_linux_ppc64.go | 0 .../x/sys/unix/zsysnum_linux_ppc64le.go | 0 .../x/sys/unix/zsysnum_linux_s390x.go | 0 .../x/sys/unix/zsysnum_netbsd_386.go | 0 .../x/sys/unix/zsysnum_netbsd_amd64.go | 0 .../x/sys/unix/zsysnum_netbsd_arm.go | 0 .../x/sys/unix/zsysnum_openbsd_386.go | 0 .../x/sys/unix/zsysnum_openbsd_amd64.go | 0 .../x/sys/unix/zsysnum_solaris_amd64.go | 0 .../x/sys/unix/ztypes_darwin_386.go | 0 .../x/sys/unix/ztypes_darwin_amd64.go | 0 .../x/sys/unix/ztypes_darwin_arm.go | 0 .../x/sys/unix/ztypes_darwin_arm64.go | 0 .../x/sys/unix/ztypes_dragonfly_amd64.go | 0 .../x/sys/unix/ztypes_freebsd_386.go | 0 .../x/sys/unix/ztypes_freebsd_amd64.go | 0 .../x/sys/unix/ztypes_freebsd_arm.go | 0 .../golang.org/x/sys/unix/ztypes_linux_386.go | 0 .../x/sys/unix/ztypes_linux_amd64.go | 0 .../golang.org/x/sys/unix/ztypes_linux_arm.go | 0 .../x/sys/unix/ztypes_linux_arm64.go | 0 .../x/sys/unix/ztypes_linux_mips64.go | 0 .../x/sys/unix/ztypes_linux_mips64le.go | 0 .../x/sys/unix/ztypes_linux_ppc64.go | 0 .../x/sys/unix/ztypes_linux_ppc64le.go | 0 .../x/sys/unix/ztypes_linux_s390x.go | 0 .../x/sys/unix/ztypes_netbsd_386.go | 0 .../x/sys/unix/ztypes_netbsd_amd64.go | 0 .../x/sys/unix/ztypes_netbsd_arm.go | 0 .../x/sys/unix/ztypes_openbsd_386.go | 0 .../x/sys/unix/ztypes_openbsd_amd64.go | 0 .../x/sys/unix/ztypes_solaris_amd64.go | 0 .../github.com/coreos/go-iptables/.travis.yml | 25 + .../github.com/coreos/go-iptables/README.md | 10 + vendor/github.com/coreos/go-iptables/build | 22 + .../coreos/go-iptables/iptables/iptables.go | 83 +- .../go-iptables/iptables/iptables_test.go | 344 ++ vendor/github.com/coreos/go-iptables/test | 55 + vendor/github.com/coreos/go-systemd/LICENSE | 191 - .../mitchellh/mapstructure/.travis.yml | 7 + .../mitchellh/mapstructure/decode_hooks.go | 6 - .../mapstructure/decode_hooks_test.go | 229 ++ .../mapstructure_benchmark_test.go | 279 ++ .../mapstructure/mapstructure_bugs_test.go | 260 ++ .../mapstructure_examples_test.go | 203 + .../mapstructure/mapstructure_test.go | 1193 ++++++ vendor/github.com/sirupsen/logrus/.gitignore | 1 + vendor/github.com/sirupsen/logrus/.travis.yml | 15 + .../github.com/sirupsen/logrus/CHANGELOG.md | 113 + .../Sirupsen => sirupsen}/logrus/LICENSE | 0 vendor/github.com/sirupsen/logrus/README.md | 505 +++ vendor/github.com/sirupsen/logrus/alt_exit.go | 64 + .../sirupsen/logrus/alt_exit_test.go | 83 + .../github.com/sirupsen/logrus/appveyor.yml | 14 + .../Sirupsen => sirupsen}/logrus/doc.go | 4 +- vendor/github.com/sirupsen/logrus/entry.go | 276 ++ .../github.com/sirupsen/logrus/entry_test.go | 77 + .../sirupsen/logrus/example_basic_test.go | 69 + .../sirupsen/logrus/example_hook_test.go | 35 + .../Sirupsen => sirupsen}/logrus/exported.go | 4 +- .../github.com/sirupsen/logrus/formatter.go | 45 + .../sirupsen/logrus/formatter_bench_test.go | 101 + .../github.com/sirupsen/logrus/hook_test.go | 122 + .../Sirupsen => sirupsen}/logrus/hooks.go | 0 .../sirupsen/logrus/hooks/syslog/README.md | 39 + .../sirupsen/logrus/hooks/syslog/syslog.go | 55 + .../logrus/hooks/syslog/syslog_test.go | 27 + .../sirupsen/logrus/hooks/test/test.go | 95 + .../sirupsen/logrus/hooks/test/test_test.go | 39 + .../sirupsen/logrus/json_formatter.go | 79 + .../sirupsen/logrus/json_formatter_test.go | 199 + vendor/github.com/sirupsen/logrus/logger.go | 317 ++ .../sirupsen/logrus/logger_bench_test.go | 61 + .../Sirupsen => sirupsen}/logrus/logrus.go | 2 +- .../github.com/sirupsen/logrus/logrus_test.go | 386 ++ .../sirupsen/logrus/terminal_bsd.go | 10 + .../sirupsen/logrus/terminal_linux.go | 14 + .../logrus/text_formatter.go | 108 +- .../sirupsen/logrus/text_formatter_test.go | 141 + vendor/github.com/sirupsen/logrus/writer.go | 62 + .../vishvananda/netlink/.travis.yml | 13 + .../github.com/vishvananda/netlink/README.md | 10 +- .../vishvananda/netlink/addr_linux.go | 13 +- .../vishvananda/netlink/addr_test.go | 193 + .../vishvananda/netlink/bridge_linux.go | 115 + .../vishvananda/netlink/bridge_linux_test.go | 80 + .../vishvananda/netlink/class_test.go | 408 ++ .../vishvananda/netlink/conntrack_linux.go | 45 +- .../vishvananda/netlink/conntrack_test.go | 387 ++ .../vishvananda/netlink/filter_linux.go | 18 +- .../vishvananda/netlink/filter_test.go | 652 +++ .../vishvananda/netlink/genetlink_linux.go | 167 + .../netlink/genetlink_unspecified.go | 25 + .../vishvananda/netlink/gtp_linux.go | 238 ++ .../vishvananda/netlink/gtp_test.go | 116 + .../vishvananda/netlink/handle_test.go | 343 ++ vendor/github.com/vishvananda/netlink/link.go | 40 +- .../vishvananda/netlink/link_linux.go | 203 +- .../vishvananda/netlink/link_test.go | 1377 +++++++ .../vishvananda/netlink/neigh_test.go | 194 + .../vishvananda/netlink/netlink_test.go | 94 + .../vishvananda/netlink/nl/addr_linux_test.go | 68 + .../vishvananda/netlink/nl/bridge_linux.go | 74 + .../netlink/nl/bridge_linux_test.go | 35 + .../vishvananda/netlink/nl/conntrack_linux.go | 4 +- .../vishvananda/netlink/nl/genetlink_linux.go | 89 + .../vishvananda/netlink/nl/link_linux.go | 96 +- .../vishvananda/netlink/nl/link_linux_test.go | 199 + .../vishvananda/netlink/nl/nl_linux.go | 25 +- .../vishvananda/netlink/nl/nl_linux_test.go | 62 + .../netlink/nl/route_linux_test.go | 43 + .../vishvananda/netlink/nl/tc_linux_test.go | 173 + .../vishvananda/netlink/nl/xfrm_linux_test.go | 161 + .../netlink/nl/xfrm_monitor_linux_test.go | 34 + .../netlink/nl/xfrm_policy_linux_test.go | 109 + .../netlink/nl/xfrm_state_linux_test.go | 304 ++ .../vishvananda/netlink/protinfo_test.go | 163 + .../vishvananda/netlink/qdisc_test.go | 347 ++ .../vishvananda/netlink/route_linux.go | 2 +- .../vishvananda/netlink/route_test.go | 580 +++ .../vishvananda/netlink/rule_test.go | 70 + .../vishvananda/netlink/socket_test.go | 60 + .../vishvananda/netlink/xfrm_monitor_test.go | 39 + .../vishvananda/netlink/xfrm_policy_test.go | 199 + .../vishvananda/netlink/xfrm_state_test.go | 270 ++ vendor/github.com/vishvananda/netns/README.md | 1 + vendor/github.com/vishvananda/netns/netns.go | 2 +- .../vishvananda/netns/netns_linux.go | 6 +- .../vishvananda/netns/netns_test.go | 66 + .../vishvananda/netns/netns_unspecified.go | 8 + .../yunify/qingcloud-sdk-go/.gitignore | 31 + .../yunify/qingcloud-sdk-go/.travis.yml | 46 + .../yunify/qingcloud-sdk-go/CHANGELOG.md | 24 +- .../yunify/qingcloud-sdk-go/Makefile | 4 +- .../yunify/qingcloud-sdk-go/client/client.go | 13 +- .../yunify/qingcloud-sdk-go/client/util.go | 18 + .../yunify/qingcloud-sdk-go/config/config.go | 24 +- .../qingcloud-sdk-go/config/config_test.go | 93 + .../qingcloud-sdk-go/config/contract.go | 1 + .../yunify/qingcloud-sdk-go/glide.yaml | 14 + .../yunify/qingcloud-sdk-go/logger/logger.go | 2 +- .../qingcloud-sdk-go/request/builder_test.go | 111 + .../qingcloud-sdk-go/request/signer_test.go | 67 + .../qingcloud-sdk-go/request/unpacker_test.go | 150 + .../service/convert_types_test.go | 311 ++ .../yunify/qingcloud-sdk-go/service/nic.go | 9 +- .../yunify/qingcloud-sdk-go/service/types.go | 44 +- .../yunify/qingcloud-sdk-go/test/.gitignore | 3 + .../test/{main.go => main_test.go} | 12 +- .../test/{service.go => service_test.go} | 2 +- .../test/{utils.go => utils_test.go} | 2 +- .../vendor/github.com/DATA-DOG/godog/LICENSE | 28 - .../github.com/DATA-DOG/godog/options.go | 37 - .../test/vendor/gopkg.in/yaml.v2/LICENSE | 13 - .../qingcloud-sdk-go/test/vendor/vendor.json | 37 - .../qingcloud-sdk-go/utils/json_test.go | 79 + .../qingcloud-sdk-go/utils/time_test.go | 57 + .../yunify/qingcloud-sdk-go/utils/wait.go | 8 +- .../qingcloud-sdk-go/utils/wait_test.go | 49 + .../qingcloud-sdk-go/utils/yaml_test.go | 75 + .../github.com/DATA-DOG/godog/.gitignore | 2 + .../github.com/DATA-DOG/godog/.travis.yml | 18 + .../github.com/DATA-DOG/godog/CHANGELOG.md | 18 + .../vendor/github.com}/DATA-DOG/godog/LICENSE | 2 +- .../vendor/github.com/DATA-DOG/godog/Makefile | 9 +- .../github.com/DATA-DOG/godog/README.md | 166 +- .../vendor/github.com/DATA-DOG/godog/ast.go | 0 .../github.com/DATA-DOG/godog/ast_test.go | 76 + .../github.com/DATA-DOG/godog/builder.go | 0 .../github.com/DATA-DOG/godog/builder_test.go | 68 + .../DATA-DOG/godog/cmd/godog/main.go | 126 + .../DATA-DOG/godog/colors/ansi_others.go | 0 .../DATA-DOG/godog/colors/ansi_windows.go | 0 .../DATA-DOG/godog/colors/colors.go | 0 .../DATA-DOG/godog/colors/no_colors.go | 0 .../DATA-DOG/godog/colors/writer.go | 0 .../DATA-DOG/godog/examples/api/README.md | 262 ++ .../DATA-DOG/godog/examples/api/api.go | 60 + .../DATA-DOG/godog/examples/api/api_test.go | 102 + .../godog/examples/api/screenshots/passed.png | Bin 0 -> 76466 bytes .../examples/api/screenshots/undefined.png | Bin 0 -> 101467 bytes .../godog/examples/api/version.feature | 25 + .../DATA-DOG/godog/examples/db/Makefile | 22 + .../DATA-DOG/godog/examples/db/README.md | 18 + .../DATA-DOG/godog/examples/db/api.go | 97 + .../DATA-DOG/godog/examples/db/api_test.go | 130 + .../DATA-DOG/godog/examples/db/users.feature | 52 + .../github.com/DATA-DOG/godog/examples/doc.go | 1 + .../examples/godogs/features/godogs.feature | 10 + .../DATA-DOG/godog/examples/godogs/godogs.go | 7 + .../godog/examples/godogs/godogs_test.go | 56 + .../godog/features/background.feature | 75 + .../DATA-DOG/godog/features/events.feature | 34 + .../godog/features/formatter/cucumber.feature | 551 +++ .../godog/features/formatter/events.feature | 78 + .../DATA-DOG/godog/features/lang.feature | 23 + .../DATA-DOG/godog/features/load.feature | 50 + .../DATA-DOG/godog/features/multistep.feature | 140 + .../DATA-DOG/godog/features/outline.feature | 152 + .../DATA-DOG/godog/features/run.feature | 264 ++ .../DATA-DOG/godog/features/snippets.feature | 146 + .../vendor/github.com/DATA-DOG/godog/flags.go | 85 +- .../github.com/DATA-DOG/godog/flags_test.go | 77 + .../vendor/github.com/DATA-DOG/godog/fmt.go | 100 +- .../github.com/DATA-DOG/godog/fmt_cucumber.go | 332 ++ .../github.com/DATA-DOG/godog/fmt_events.go | 25 +- .../github.com/DATA-DOG/godog/fmt_junit.go | 45 +- .../DATA-DOG/godog/fmt_junit_test.go | 171 + .../github.com/DATA-DOG/godog/fmt_pretty.go | 63 +- .../github.com/DATA-DOG/godog/fmt_progress.go | 16 +- .../DATA-DOG/godog/fmt_progress_test.go | 357 ++ .../github.com/DATA-DOG/godog/fmt_test.go | 25 + .../github.com/DATA-DOG/godog/gherkin.go | 0 .../github.com/DATA-DOG/godog/gherkin/LICENSE | 0 .../DATA-DOG/godog/gherkin/README.md | 0 .../github.com/DATA-DOG/godog/gherkin/ast.go | 0 .../DATA-DOG/godog/gherkin/astbuilder.go | 0 .../DATA-DOG/godog/gherkin/dialect.go | 0 .../godog/gherkin/dialects_builtin.go | 0 .../DATA-DOG/godog/gherkin/gherkin.go | 0 .../DATA-DOG/godog/gherkin/matcher.go | 0 .../DATA-DOG/godog/gherkin/parser.go | 0 .../vendor/github.com/DATA-DOG/godog/godog.go | 5 +- .../vendor/github.com/DATA-DOG/godog/logo.png | Bin .../github.com/DATA-DOG/godog/options.go | 59 + .../vendor/github.com/DATA-DOG/godog/run.go | 109 +- .../github.com/DATA-DOG/godog/run_test.go | 247 ++ .../DATA-DOG/godog/screenshots/dir-tree.png | Bin 0 -> 25278 bytes .../DATA-DOG/godog/screenshots/passed.png | Bin 0 -> 59035 bytes .../DATA-DOG/godog/screenshots/pending.png | Bin 0 -> 56795 bytes .../DATA-DOG/godog/screenshots/undefined.png | Bin 0 -> 93601 bytes .../github.com/DATA-DOG/godog/stacktrace.go | 141 + .../DATA-DOG/godog/stacktrace_test.go | 60 + .../github.com/DATA-DOG/godog/stepdef.go | 29 +- .../github.com/DATA-DOG/godog/stepdef_test.go | 106 + .../vendor/github.com/DATA-DOG/godog/suite.go | 300 +- .../DATA-DOG/godog/suite_context.go | 483 +++ .../github.com/DATA-DOG/godog/suite_test.go | 46 + .../DATA-DOG/godog/tag_filter_test.go | 29 + .../vendor/github.com/DATA-DOG/godog/utils.go | 11 +- .../github.com/DATA-DOG/godog/utils_test.go | 22 + .../Sirupsen/logrus/json_formatter.go | 41 - .../github.com/Sirupsen/logrus/logger.go | 212 - .../Sirupsen/logrus/terminal_solaris.go | 15 - .../Sirupsen/logrus/terminal_windows.go | 27 - .../github.com/Sirupsen/logrus/writer.go | 31 - .../github.com/davecgh/go-spew/.gitignore | 22 + .../github.com/davecgh/go-spew/.travis.yml | 14 + .../github.com/davecgh/go-spew/README.md | 194 + .../github.com/davecgh/go-spew/cov_report.sh | 22 + .../davecgh/go-spew/spew/common_test.go | 298 ++ .../davecgh/go-spew/spew/dump_test.go | 1042 +++++ .../davecgh/go-spew/spew/dumpcgo_test.go | 99 + .../davecgh/go-spew/spew/dumpnocgo_test.go | 26 + .../davecgh/go-spew/spew/example_test.go | 226 + .../davecgh/go-spew/spew/format_test.go | 1558 +++++++ .../davecgh/go-spew/spew/internal_test.go | 87 + .../go-spew/spew/internalunsafe_test.go | 102 + .../davecgh/go-spew/spew/spew_test.go | 309 ++ .../davecgh/go-spew/spew/testdata/dumpcgo.go | 82 + .../davecgh/go-spew/test_coverage.txt | 61 + .../github.com/pmezard/go-difflib/.travis.yml | 5 + .../github.com/pmezard/go-difflib/README.md | 50 + .../pmezard/go-difflib/difflib/difflib.go | 54 +- .../go-difflib/difflib/difflib_test.go | 352 ++ .../github.com/sirupsen/logrus/.gitignore | 1 + .../github.com/sirupsen/logrus/.travis.yml | 12 + .../logrus/CHANGELOG.md | 43 + .../vendor/github.com/sirupsen/logrus/LICENSE | 21 + .../{Sirupsen => sirupsen}/logrus/README.md | 210 +- .../github.com/sirupsen/logrus/alt_exit.go | 64 + .../sirupsen/logrus/alt_exit_test.go | 74 + .../vendor/github.com/sirupsen/logrus/doc.go | 26 + .../{Sirupsen => sirupsen}/logrus/entry.go | 93 +- .../github.com/sirupsen/logrus/entry_test.go | 77 + .../sirupsen/logrus/examples/basic/basic.go | 59 + .../sirupsen/logrus/examples/hook/hook.go | 30 + .../github.com/sirupsen/logrus/exported.go | 193 + .../logrus/formatter.go | 15 +- .../sirupsen/logrus/formatter_bench_test.go | 101 + .../github.com/sirupsen/logrus/hook_test.go | 122 + .../github.com/sirupsen/logrus/hooks.go | 34 + .../sirupsen/logrus/hooks/syslog/README.md | 39 + .../sirupsen/logrus/hooks/syslog/syslog.go | 54 + .../logrus/hooks/syslog/syslog_test.go | 26 + .../sirupsen/logrus/hooks/test/test.go | 95 + .../sirupsen/logrus/hooks/test/test_test.go | 39 + .../sirupsen/logrus/json_formatter.go | 74 + .../sirupsen/logrus/json_formatter_test.go | 199 + .../github.com/sirupsen/logrus/logger.go | 317 ++ .../sirupsen/logrus/logger_bench_test.go | 61 + .../github.com/sirupsen/logrus/logrus.go | 143 + .../github.com/sirupsen/logrus/logrus_test.go | 386 ++ .../sirupsen/logrus/terminal_appengine.go | 10 + .../logrus/terminal_bsd.go | 1 + .../logrus/terminal_linux.go | 2 + .../logrus/terminal_notwindows.go | 15 +- .../sirupsen/logrus/terminal_solaris.go | 21 + .../sirupsen/logrus/terminal_windows.go | 82 + .../sirupsen/logrus/text_formatter.go | 189 + .../sirupsen/logrus/text_formatter_test.go | 161 + .../github.com/sirupsen/logrus/writer.go | 62 + .../github.com/stretchr/testify/.gitignore | 24 + .../github.com/stretchr/testify/.travis.yml | 16 + .../stretchr/testify/Godeps/Godeps.json | 23 + .../github.com/stretchr/testify/Godeps/Readme | 5 + .../github.com/stretchr/testify/LICENCE.txt} | 0 .../github.com/stretchr/testify/README.md | 332 ++ .../stretchr/testify/_codegen/main.go | 287 ++ .../testify/assert/assertion_forward.go | 157 +- .../stretchr/testify/assert/assertions.go | 84 +- .../testify/assert/assertions_test.go | 1210 ++++++ .../testify/assert/forward_assertions_test.go | 611 +++ .../testify/assert/http_assertions.go | 2 +- .../testify/assert/http_assertions_test.go | 86 + .../vendor/github.com/stretchr/testify/doc.go | 22 + .../github.com/stretchr/testify/http/doc.go | 2 + .../testify/http/test_response_writer.go | 49 + .../testify/http/test_round_tripper.go | 17 + .../github.com/stretchr/testify/mock/doc.go | 44 + .../github.com/stretchr/testify/mock/mock.go | 763 ++++ .../stretchr/testify/mock/mock_test.go | 1132 ++++++ .../stretchr/testify/package_test.go | 12 + .../stretchr/testify/require/doc.go | 28 + .../testify/require/forward_requirements.go | 16 + .../require/forward_requirements_test.go | 385 ++ .../stretchr/testify/require/require.go | 464 +++ .../stretchr/testify/require/require.go.tmpl | 6 + .../testify/require/require_forward.go | 388 ++ .../testify/require/require_forward.go.tmpl | 4 + .../stretchr/testify/require/requirements.go | 9 + .../testify/require/requirements_test.go | 369 ++ .../github.com/stretchr/testify/suite/doc.go | 65 + .../stretchr/testify/suite/interfaces.go | 34 + .../stretchr/testify/suite/suite.go | 115 + .../stretchr/testify/suite/suite_test.go | 239 ++ .../github.com}/davecgh/go-spew/LICENSE | 0 .../github.com/davecgh/go-spew/spew/bypass.go | 152 + .../davecgh/go-spew/spew/bypasssafe.go | 38 + .../github.com/davecgh/go-spew/spew/common.go | 341 ++ .../github.com/davecgh/go-spew/spew/config.go | 297 ++ .../github.com/davecgh/go-spew/spew/doc.go | 202 + .../github.com/davecgh/go-spew/spew/dump.go | 509 +++ .../github.com/davecgh/go-spew/spew/format.go | 419 ++ .../github.com/davecgh/go-spew/spew/spew.go | 148 + .../github.com}/pmezard/go-difflib/LICENSE | 0 .../pmezard/go-difflib/difflib/difflib.go | 758 ++++ .../github.com/stretchr/objx/.gitignore | 22 + .../github.com/stretchr/objx/LICENSE.md | 23 + .../vendor/github.com/stretchr/objx/README.md | 3 + .../github.com/stretchr/objx/accessors.go | 179 + .../stretchr/objx/codegen/array-access.txt | 14 + .../stretchr/objx/codegen/index.html | 86 + .../stretchr/objx/codegen/template.txt | 286 ++ .../stretchr/objx/codegen/types_list.txt | 20 + .../github.com/stretchr/objx/constants.go | 13 + .../github.com/stretchr/objx/conversions.go | 117 + .../vendor/github.com/stretchr/objx/doc.go | 72 + .../vendor/github.com/stretchr/objx/map.go | 222 + .../github.com/stretchr/objx/mutations.go | 81 + .../github.com/stretchr/objx/security.go | 14 + .../vendor/github.com/stretchr/objx/tests.go | 17 + .../stretchr/objx/type_specific_codegen.go | 2881 +++++++++++++ .../vendor/github.com/stretchr/objx/value.go | 13 + .../vendor/golang.org/x/sys/.gitattributes | 10 + .../vendor/golang.org/x/sys/.gitignore | 2 + .../vendor/golang.org/x/sys/AUTHORS | 3 + .../vendor/golang.org/x/sys/CONTRIBUTING.md | 31 + .../vendor/golang.org/x/sys/CONTRIBUTORS | 3 + .../vendor/golang.org/x/sys/README | 3 + .../vendor/golang.org/x/sys/codereview.cfg | 1 + .../golang.org/x/sys/{unix => plan9}/asm.s | 2 - .../golang.org/x/sys/plan9/asm_plan9_386.s | 30 + .../golang.org/x/sys/plan9/asm_plan9_amd64.s | 30 + .../golang.org/x/sys/plan9/const_plan9.go | 70 + .../golang.org/x/sys/plan9/dir_plan9.go | 212 + .../golang.org/x/sys/plan9/env_plan9.go | 27 + .../golang.org/x/sys/plan9/env_unset.go | 14 + .../golang.org/x/sys/plan9/errors_plan9.go | 50 + .../vendor/golang.org/x/sys/plan9/mkall.sh | 138 + .../vendor/golang.org/x/sys/plan9/mkerrors.sh | 246 ++ .../golang.org/x/sys/plan9/mksyscall.pl | 319 ++ .../golang.org/x/sys/plan9/mksysnum_plan9.sh | 23 + .../golang.org/x/sys/plan9/pwd_go15_plan9.go | 21 + .../golang.org/x/sys/plan9/pwd_plan9.go | 23 + .../vendor/golang.org/x/sys/plan9/race.go | 30 + .../vendor/golang.org/x/sys/plan9/race0.go | 25 + .../vendor/golang.org/x/sys/plan9/str.go | 22 + .../vendor/golang.org/x/sys/plan9/syscall.go | 74 + .../golang.org/x/sys/plan9/syscall_plan9.go | 349 ++ .../golang.org/x/sys/plan9/syscall_test.go | 33 + .../x/sys/plan9/zsyscall_plan9_386.go | 292 ++ .../x/sys/plan9/zsyscall_plan9_amd64.go | 292 ++ .../golang.org/x/sys/plan9/zsysnum_plan9.go | 49 + .../vendor/golang.org/x/sys/unix/.gitignore | 1 + .../vendor/golang.org/x/sys/unix/README.md | 173 + .../golang.org/x/sys/unix/asm_linux_mipsx.s | 31 + .../golang.org/x/sys/unix/asm_solaris_amd64.s | 4 +- .../golang.org/x/sys/unix/cap_freebsd.go | 195 + .../golang.org/x/sys/unix/creds_test.go | 121 + .../vendor/golang.org/x/sys/unix/dirent.go | 102 + .../golang.org/x/sys/unix/endian_big.go | 9 + .../golang.org/x/sys/unix/endian_little.go | 9 + .../golang.org/x/sys/unix/export_test.go | 9 + .../vendor/golang.org/x/sys/unix/file_unix.go | 27 + .../x/sys/unix/flock_linux_32bit.go | 2 +- .../golang.org/x/sys/unix/linux/Dockerfile | 48 + .../golang.org/x/sys/unix/linux/mkall.go | 379 ++ .../golang.org/x/sys/unix/linux/mksysnum.pl} | 15 +- .../golang.org/x/sys/unix/linux/types.go} | 103 +- .../vendor/golang.org/x/sys/unix/mkall.sh | 147 +- .../vendor/golang.org/x/sys/unix/mkerrors.sh | 89 +- .../vendor/golang.org/x/sys/unix/mkpost.go | 74 +- .../vendor/golang.org/x/sys/unix/mksyscall.pl | 33 +- .../x/sys/unix/mksyscall_solaris.pl | 25 +- .../golang.org/x/sys/unix/mksysnum_darwin.pl | 2 +- .../x/sys/unix/mksysnum_dragonfly.pl | 2 +- .../golang.org/x/sys/unix/mksysnum_freebsd.pl | 15 +- .../golang.org/x/sys/unix/mksysnum_netbsd.pl | 2 +- .../golang.org/x/sys/unix/mksysnum_openbsd.pl | 2 +- .../golang.org/x/sys/unix/mmap_unix_test.go | 23 + .../golang.org/x/sys/unix/openbsd_pledge.go | 38 + .../golang.org/x/sys/unix/openbsd_test.go | 113 + .../golang.org/x/sys/unix/sockcmsg_unix.go | 9 +- .../vendor/golang.org/x/sys/unix/syscall.go | 7 - .../golang.org/x/sys/unix/syscall_bsd.go | 18 +- .../golang.org/x/sys/unix/syscall_bsd_test.go | 62 + .../golang.org/x/sys/unix/syscall_darwin.go | 38 +- .../x/sys/unix/syscall_dragonfly.go | 65 +- .../golang.org/x/sys/unix/syscall_freebsd.go | 41 +- .../x/sys/unix/syscall_freebsd_test.go | 290 ++ .../golang.org/x/sys/unix/syscall_linux.go | 429 +- .../x/sys/unix/syscall_linux_amd64.go | 5 - .../x/sys/unix/syscall_linux_amd64_gc.go | 13 + .../x/sys/unix/syscall_linux_mips64x.go | 5 +- .../x/sys/unix/syscall_linux_mipsx.go | 239 ++ .../x/sys/unix/syscall_linux_s390x.go | 1 - .../x/sys/unix/syscall_linux_test.go | 227 ++ .../golang.org/x/sys/unix/syscall_netbsd.go | 36 +- .../golang.org/x/sys/unix/syscall_openbsd.go | 37 +- .../golang.org/x/sys/unix/syscall_solaris.go | 80 +- .../x/sys/unix/syscall_solaris_test.go | 34 + .../golang.org/x/sys/unix/syscall_test.go | 50 + .../golang.org/x/sys/unix/syscall_unix.go | 6 +- .../golang.org/x/sys/unix/syscall_unix_gc.go | 15 + .../x/sys/unix/syscall_unix_test.go | 345 ++ .../golang.org/x/sys/unix/types_darwin.go | 2 +- .../golang.org/x/sys/unix/types_dragonfly.go | 2 +- .../golang.org/x/sys/unix/types_freebsd.go | 10 +- .../golang.org/x/sys/unix/types_netbsd.go | 2 +- .../golang.org/x/sys/unix/types_openbsd.go | 2 +- .../golang.org/x/sys/unix/types_solaris.go | 9 +- .../x/sys/unix/zerrors_dragonfly_amd64.go | 56 +- .../x/sys/unix/zerrors_freebsd_amd64.go | 2871 +++++++------ .../x/sys/unix/zerrors_linux_386.go | 3287 ++++++++------- .../x/sys/unix/zerrors_linux_amd64.go | 3289 ++++++++------- .../x/sys/unix/zerrors_linux_arm.go | 3216 ++++++++------- .../x/sys/unix/zerrors_linux_arm64.go | 3351 ++++++++------- .../x/sys/unix/zerrors_linux_mips.go | 2189 ++++++++++ .../x/sys/unix/zerrors_linux_mips64.go | 3382 ++++++++------- .../x/sys/unix/zerrors_linux_mips64le.go | 3382 ++++++++------- .../x/sys/unix/zerrors_linux_mipsle.go | 2189 ++++++++++ .../x/sys/unix/zerrors_linux_ppc64.go | 3495 ++++++++-------- .../x/sys/unix/zerrors_linux_ppc64le.go | 3494 ++++++++-------- .../x/sys/unix/zerrors_linux_s390x.go | 3553 ++++++++-------- .../x/sys/unix/zerrors_linux_sparc64.go | 65 + .../x/sys/unix/zerrors_solaris_amd64.go | 49 +- .../x/sys/unix/zsyscall_darwin_386.go | 37 +- .../x/sys/unix/zsyscall_darwin_amd64.go | 38 +- .../x/sys/unix/zsyscall_darwin_arm.go | 51 +- .../x/sys/unix/zsyscall_darwin_arm64.go | 37 +- .../x/sys/unix/zsyscall_dragonfly_amd64.go | 48 +- .../x/sys/unix/zsyscall_freebsd_386.go | 52 +- .../x/sys/unix/zsyscall_freebsd_amd64.go | 100 +- .../x/sys/unix/zsyscall_freebsd_arm.go | 52 +- .../x/sys/unix/zsyscall_linux_386.go | 385 +- .../x/sys/unix/zsyscall_linux_amd64.go | 386 +- .../x/sys/unix/zsyscall_linux_arm.go | 384 +- .../x/sys/unix/zsyscall_linux_arm64.go | 383 +- .../x/sys/unix/zsyscall_linux_mips.go | 2085 ++++++++++ .../x/sys/unix/zsyscall_linux_mips64.go | 396 +- .../x/sys/unix/zsyscall_linux_mips64le.go | 396 +- .../x/sys/unix/zsyscall_linux_mipsle.go | 2085 ++++++++++ .../x/sys/unix/zsyscall_linux_ppc64.go | 386 +- .../x/sys/unix/zsyscall_linux_ppc64le.go | 386 +- .../x/sys/unix/zsyscall_linux_s390x.go | 386 +- .../x/sys/unix/zsyscall_linux_sparc64.go | 89 +- .../x/sys/unix/zsyscall_netbsd_386.go | 32 +- .../x/sys/unix/zsyscall_netbsd_amd64.go | 32 +- .../x/sys/unix/zsyscall_netbsd_arm.go | 32 +- .../x/sys/unix/zsyscall_openbsd_386.go | 34 +- .../x/sys/unix/zsyscall_openbsd_amd64.go | 34 +- .../x/sys/unix/zsyscall_solaris_amd64.go | 144 +- .../x/sys/unix/zsysnum_dragonfly_amd64.go | 21 +- .../x/sys/unix/zsysnum_freebsd_amd64.go | 686 ++-- .../x/sys/unix/zsysnum_linux_386.go | 39 +- .../x/sys/unix/zsysnum_linux_amd64.go | 24 +- .../x/sys/unix/zsysnum_linux_arm.go | 37 +- .../x/sys/unix/zsysnum_linux_arm64.go | 17 +- .../x/sys/unix/zsysnum_linux_mips.go | 374 ++ .../x/sys/unix/zsysnum_linux_mips64.go | 11 +- .../x/sys/unix/zsysnum_linux_mips64le.go | 11 +- .../x/sys/unix/zsysnum_linux_mipsle.go | 374 ++ .../x/sys/unix/zsysnum_linux_ppc64.go | 13 +- .../x/sys/unix/zsysnum_linux_ppc64le.go | 20 +- .../x/sys/unix/zsysnum_linux_s390x.go | 7 +- .../x/sys/unix/zsysnum_linux_sparc64.go | 2 +- .../x/sys/unix/ztypes_dragonfly_amd64.go | 6 +- .../x/sys/unix/ztypes_freebsd_amd64.go | 61 +- .../golang.org/x/sys/unix/ztypes_linux_386.go | 76 +- .../x/sys/unix/ztypes_linux_amd64.go | 104 +- .../golang.org/x/sys/unix/ztypes_linux_arm.go | 85 +- .../x/sys/unix/ztypes_linux_arm64.go | 106 +- .../x/sys/unix/ztypes_linux_mips.go | 679 ++++ .../x/sys/unix/ztypes_linux_mips64.go | 101 +- .../x/sys/unix/ztypes_linux_mips64le.go | 101 +- .../x/sys/unix/ztypes_linux_mipsle.go | 679 ++++ .../x/sys/unix/ztypes_linux_ppc64.go | 108 +- .../x/sys/unix/ztypes_linux_ppc64le.go | 108 +- .../x/sys/unix/ztypes_linux_s390x.go | 68 +- .../x/sys/unix/ztypes_linux_sparc64.go | 26 + .../x/sys/unix/ztypes_solaris_amd64.go | 23 +- .../x/sys/windows/asm_windows_386.s | 13 + .../x/sys/windows/asm_windows_amd64.s | 13 + .../golang.org/x/sys/windows/dll_windows.go | 377 ++ .../golang.org/x/sys/windows/env_unset.go | 15 + .../golang.org/x/sys/windows/env_windows.go | 25 + .../golang.org/x/sys/windows/eventlog.go | 20 + .../golang.org/x/sys/windows/exec_windows.go | 97 + .../x/sys/windows/memory_windows.go | 26 + .../golang.org/x/sys/windows/mksyscall.go | 7 + .../vendor/golang.org/x/sys/windows/race.go | 30 + .../vendor/golang.org/x/sys/windows/race0.go | 25 + .../x/sys/windows/registry/export_test.go | 11 + .../golang.org/x/sys/windows/registry/key.go | 200 + .../x/sys/windows/registry/mksyscall.go | 7 + .../x/sys/windows/registry/registry_test.go | 756 ++++ .../x/sys/windows/registry/syscall.go | 32 + .../x/sys/windows/registry/value.go | 384 ++ .../sys/windows/registry/zsyscall_windows.go | 120 + .../x/sys/windows/security_windows.go | 435 ++ .../golang.org/x/sys/windows/service.go | 164 + .../vendor/golang.org/x/sys/windows/str.go | 22 + .../golang.org/x/sys/windows/svc/debug/log.go | 56 + .../x/sys/windows/svc/debug/service.go | 45 + .../golang.org/x/sys/windows/svc/event.go | 48 + .../x/sys/windows/svc/eventlog/install.go | 80 + .../x/sys/windows/svc/eventlog/log.go | 70 + .../x/sys/windows/svc/eventlog/log_test.go | 51 + .../x/sys/windows/svc/example/beep.go | 22 + .../x/sys/windows/svc/example/install.go | 92 + .../x/sys/windows/svc/example/main.go | 76 + .../x/sys/windows/svc/example/manage.go | 62 + .../x/sys/windows/svc/example/service.go | 82 + .../golang.org/x/sys/windows/svc/go12.c | 24 + .../golang.org/x/sys/windows/svc/go12.go | 11 + .../golang.org/x/sys/windows/svc/go13.go | 31 + .../x/sys/windows/svc/mgr/config.go | 139 + .../golang.org/x/sys/windows/svc/mgr/mgr.go | 162 + .../x/sys/windows/svc/mgr/mgr_test.go | 169 + .../x/sys/windows/svc/mgr/service.go | 72 + .../golang.org/x/sys/windows/svc/security.go | 62 + .../golang.org/x/sys/windows/svc/service.go | 363 ++ .../golang.org/x/sys/windows/svc/svc_test.go | 118 + .../golang.org/x/sys/windows/svc/sys_386.s | 68 + .../golang.org/x/sys/windows/svc/sys_amd64.s | 42 + .../golang.org/x/sys/windows/syscall.go | 71 + .../golang.org/x/sys/windows/syscall_test.go | 33 + .../x/sys/windows/syscall_windows.go | 998 +++++ .../x/sys/windows/syscall_windows_test.go | 107 + .../x/sys/windows/zsyscall_windows.go | 2342 +++++++++++ .../x/sys/windows/ztypes_windows.go | 1235 ++++++ .../x/sys/windows/ztypes_windows_386.go | 22 + .../x/sys/windows/ztypes_windows_amd64.go | 22 + .../vendor/gopkg.in/yaml.v2/.travis.yml | 9 + .../vendor/gopkg.in/yaml.v2/decode.go | 8 +- .../vendor/gopkg.in/yaml.v2/decode_test.go | 1009 +++++ .../vendor/gopkg.in/yaml.v2/emitterc.go | 9 +- .../vendor/gopkg.in/yaml.v2/encode_test.go | 501 +++ .../vendor/gopkg.in/yaml.v2/parserc.go | 1 - .../vendor/gopkg.in/yaml.v2/resolve.go | 11 +- .../vendor/gopkg.in/yaml.v2/scannerc.go | 2 +- .../vendor/gopkg.in/yaml.v2/suite_test.go | 12 + .../vendor/gopkg.in/yaml.v2/yaml.go | 13 +- .../vendor/gopkg.in/yaml.v2/yamlh.go | 2 +- .../qingcloud-sdk-go/vendor/vendor.json | 47 - .../yunify/qingcloud-sdk-go/version.go | 2 +- vendor/golang.org/x/crypto/.gitattributes | 10 + vendor/golang.org/x/crypto/.gitignore | 2 + vendor/golang.org/x/crypto/AUTHORS | 3 + vendor/golang.org/x/crypto/CONTRIBUTING.md | 31 + vendor/golang.org/x/crypto/CONTRIBUTORS | 3 + vendor/golang.org/x/crypto/LICENSE | 27 + vendor/golang.org/x/crypto/PATENTS | 22 + vendor/golang.org/x/crypto/README.md | 21 + vendor/golang.org/x/crypto/acme/acme.go | 1054 +++++ vendor/golang.org/x/crypto/acme/acme_test.go | 1346 ++++++ .../x/crypto/acme/autocert/autocert.go | 819 ++++ .../x/crypto/acme/autocert/autocert_test.go | 606 +++ .../x/crypto/acme/autocert/cache.go | 130 + .../x/crypto/acme/autocert/cache_test.go | 58 + .../x/crypto/acme/autocert/example_test.go | 34 + .../x/crypto/acme/autocert/listener.go | 160 + .../x/crypto/acme/autocert/renewal.go | 124 + .../x/crypto/acme/autocert/renewal_test.go | 191 + vendor/golang.org/x/crypto/acme/jws.go | 153 + vendor/golang.org/x/crypto/acme/jws_test.go | 319 ++ vendor/golang.org/x/crypto/acme/types.go | 329 ++ vendor/golang.org/x/crypto/acme/types_test.go | 63 + vendor/golang.org/x/crypto/bcrypt/base64.go | 35 + vendor/golang.org/x/crypto/bcrypt/bcrypt.go | 295 ++ .../golang.org/x/crypto/bcrypt/bcrypt_test.go | 243 ++ vendor/golang.org/x/crypto/blake2b/blake2b.go | 207 + .../x/crypto/blake2b/blake2bAVX2_amd64.go | 43 + .../x/crypto/blake2b/blake2bAVX2_amd64.s | 762 ++++ .../x/crypto/blake2b/blake2b_amd64.go | 25 + .../x/crypto/blake2b/blake2b_amd64.s | 290 ++ .../x/crypto/blake2b/blake2b_generic.go | 179 + .../x/crypto/blake2b/blake2b_ref.go | 11 + .../x/crypto/blake2b/blake2b_test.go | 798 ++++ vendor/golang.org/x/crypto/blake2b/blake2x.go | 177 + .../golang.org/x/crypto/blake2b/register.go | 32 + vendor/golang.org/x/crypto/blake2s/blake2s.go | 187 + .../x/crypto/blake2s/blake2s_386.go | 35 + .../golang.org/x/crypto/blake2s/blake2s_386.s | 460 +++ .../x/crypto/blake2s/blake2s_amd64.go | 40 + .../x/crypto/blake2s/blake2s_amd64.s | 463 +++ .../x/crypto/blake2s/blake2s_generic.go | 174 + .../x/crypto/blake2s/blake2s_ref.go | 17 + .../x/crypto/blake2s/blake2s_test.go | 1002 +++++ vendor/golang.org/x/crypto/blake2s/blake2x.go | 178 + .../golang.org/x/crypto/blake2s/register.go | 21 + vendor/golang.org/x/crypto/blowfish/block.go | 159 + .../x/crypto/blowfish/blowfish_test.go | 274 ++ vendor/golang.org/x/crypto/blowfish/cipher.go | 91 + vendor/golang.org/x/crypto/blowfish/const.go | 199 + vendor/golang.org/x/crypto/bn256/bn256.go | 404 ++ .../golang.org/x/crypto/bn256/bn256_test.go | 304 ++ vendor/golang.org/x/crypto/bn256/constants.go | 44 + vendor/golang.org/x/crypto/bn256/curve.go | 278 ++ .../golang.org/x/crypto/bn256/example_test.go | 43 + vendor/golang.org/x/crypto/bn256/gfp12.go | 200 + vendor/golang.org/x/crypto/bn256/gfp2.go | 219 + vendor/golang.org/x/crypto/bn256/gfp6.go | 296 ++ vendor/golang.org/x/crypto/bn256/optate.go | 395 ++ vendor/golang.org/x/crypto/bn256/twist.go | 249 ++ vendor/golang.org/x/crypto/cast5/cast5.go | 526 +++ .../golang.org/x/crypto/cast5/cast5_test.go | 106 + .../chacha20poly1305/chacha20poly1305.go | 83 + .../chacha20poly1305_amd64.go | 127 + .../chacha20poly1305/chacha20poly1305_amd64.s | 2714 ++++++++++++ .../chacha20poly1305_generic.go | 70 + .../chacha20poly1305_noasm.go | 15 + .../chacha20poly1305/chacha20poly1305_test.go | 182 + .../chacha20poly1305_vectors_test.go | 332 ++ .../internal/chacha20/chacha_generic.go | 199 + .../internal/chacha20/chacha_test.go | 33 + vendor/golang.org/x/crypto/codereview.cfg | 1 + vendor/golang.org/x/crypto/cryptobyte/asn1.go | 604 +++ .../x/crypto/cryptobyte/asn1_test.go | 285 ++ .../golang.org/x/crypto/cryptobyte/builder.go | 255 ++ .../x/crypto/cryptobyte/cryptobyte_test.go | 379 ++ .../x/crypto/cryptobyte/example_test.go | 120 + .../golang.org/x/crypto/cryptobyte/string.go | 157 + .../x/crypto/curve25519/const_amd64.h | 8 + .../x/crypto/curve25519/const_amd64.s | 20 + .../x/crypto/curve25519/cswap_amd64.s | 65 + .../x/crypto/curve25519/curve25519.go | 834 ++++ .../x/crypto/curve25519/curve25519_test.go | 39 + vendor/golang.org/x/crypto/curve25519/doc.go | 23 + .../x/crypto/curve25519/freeze_amd64.s | 73 + .../x/crypto/curve25519/ladderstep_amd64.s | 1377 +++++++ .../x/crypto/curve25519/mont25519_amd64.go | 240 ++ .../x/crypto/curve25519/mul_amd64.s | 169 + .../x/crypto/curve25519/square_amd64.s | 132 + vendor/golang.org/x/crypto/ed25519/ed25519.go | 181 + .../x/crypto/ed25519/ed25519_test.go | 183 + .../ed25519/internal/edwards25519/const.go | 1422 +++++++ .../internal/edwards25519/edwards25519.go | 1771 ++++++++ .../x/crypto/ed25519/testdata/sign.input.gz | Bin 0 -> 50330 bytes .../golang.org/x/crypto/hkdf/example_test.go | 61 + vendor/golang.org/x/crypto/hkdf/hkdf.go | 75 + vendor/golang.org/x/crypto/hkdf/hkdf_test.go | 370 ++ .../golang.org/x/crypto/md4/example_test.go | 20 + vendor/golang.org/x/crypto/md4/md4.go | 118 + vendor/golang.org/x/crypto/md4/md4_test.go | 71 + vendor/golang.org/x/crypto/md4/md4block.go | 89 + vendor/golang.org/x/crypto/nacl/auth/auth.go | 58 + .../x/crypto/nacl/auth/auth_test.go | 172 + .../x/crypto/nacl/auth/example_test.go | 36 + vendor/golang.org/x/crypto/nacl/box/box.go | 86 + .../golang.org/x/crypto/nacl/box/box_test.go | 78 + .../x/crypto/nacl/box/example_test.go | 95 + .../x/crypto/nacl/secretbox/example_test.go | 53 + .../x/crypto/nacl/secretbox/secretbox.go | 149 + .../x/crypto/nacl/secretbox/secretbox_test.go | 154 + vendor/golang.org/x/crypto/ocsp/ocsp.go | 778 ++++ vendor/golang.org/x/crypto/ocsp/ocsp_test.go | 875 ++++ .../x/crypto/openpgp/armor/armor.go | 219 + .../x/crypto/openpgp/armor/armor_test.go | 95 + .../x/crypto/openpgp/armor/encode.go | 160 + .../x/crypto/openpgp/canonical_text.go | 59 + .../x/crypto/openpgp/canonical_text_test.go | 52 + .../x/crypto/openpgp/clearsign/clearsign.go | 376 ++ .../openpgp/clearsign/clearsign_test.go | 210 + .../x/crypto/openpgp/elgamal/elgamal.go | 122 + .../x/crypto/openpgp/elgamal/elgamal_test.go | 49 + .../x/crypto/openpgp/errors/errors.go | 72 + vendor/golang.org/x/crypto/openpgp/keys.go | 637 +++ .../golang.org/x/crypto/openpgp/keys_test.go | 404 ++ .../x/crypto/openpgp/packet/compressed.go | 123 + .../crypto/openpgp/packet/compressed_test.go | 41 + .../x/crypto/openpgp/packet/config.go | 91 + .../x/crypto/openpgp/packet/encrypted_key.go | 199 + .../openpgp/packet/encrypted_key_test.go | 146 + .../x/crypto/openpgp/packet/literal.go | 89 + .../x/crypto/openpgp/packet/ocfb.go | 143 + .../x/crypto/openpgp/packet/ocfb_test.go | 46 + .../openpgp/packet/one_pass_signature.go | 73 + .../x/crypto/openpgp/packet/opaque.go | 162 + .../x/crypto/openpgp/packet/opaque_test.go | 67 + .../x/crypto/openpgp/packet/packet.go | 537 +++ .../x/crypto/openpgp/packet/packet_test.go | 255 ++ .../x/crypto/openpgp/packet/private_key.go | 380 ++ .../crypto/openpgp/packet/private_key_test.go | 270 ++ .../x/crypto/openpgp/packet/public_key.go | 748 ++++ .../crypto/openpgp/packet/public_key_test.go | 202 + .../x/crypto/openpgp/packet/public_key_v3.go | 279 ++ .../openpgp/packet/public_key_v3_test.go | 82 + .../x/crypto/openpgp/packet/reader.go | 76 + .../x/crypto/openpgp/packet/signature.go | 731 ++++ .../x/crypto/openpgp/packet/signature_test.go | 78 + .../x/crypto/openpgp/packet/signature_v3.go | 146 + .../openpgp/packet/signature_v3_test.go | 92 + .../openpgp/packet/symmetric_key_encrypted.go | 155 + .../packet/symmetric_key_encrypted_test.go | 117 + .../openpgp/packet/symmetrically_encrypted.go | 290 ++ .../packet/symmetrically_encrypted_test.go | 123 + .../x/crypto/openpgp/packet/userattribute.go | 91 + .../openpgp/packet/userattribute_test.go | 109 + .../x/crypto/openpgp/packet/userid.go | 160 + .../x/crypto/openpgp/packet/userid_test.go | 87 + vendor/golang.org/x/crypto/openpgp/read.go | 442 ++ .../golang.org/x/crypto/openpgp/read_test.go | 613 +++ vendor/golang.org/x/crypto/openpgp/s2k/s2k.go | 273 ++ .../x/crypto/openpgp/s2k/s2k_test.go | 137 + vendor/golang.org/x/crypto/openpgp/write.go | 378 ++ .../golang.org/x/crypto/openpgp/write_test.go | 273 ++ .../x/crypto/otr/libotr_test_helper.c | 197 + vendor/golang.org/x/crypto/otr/otr.go | 1415 +++++++ vendor/golang.org/x/crypto/otr/otr_test.go | 470 +++ vendor/golang.org/x/crypto/otr/smp.go | 572 +++ vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go | 77 + .../golang.org/x/crypto/pbkdf2/pbkdf2_test.go | 157 + .../golang.org/x/crypto/pkcs12/bmp-string.go | 50 + .../x/crypto/pkcs12/bmp-string_test.go | 63 + vendor/golang.org/x/crypto/pkcs12/crypto.go | 131 + .../golang.org/x/crypto/pkcs12/crypto_test.go | 125 + vendor/golang.org/x/crypto/pkcs12/errors.go | 23 + .../crypto/pkcs12/internal/rc2/bench_test.go | 27 + .../x/crypto/pkcs12/internal/rc2/rc2.go | 274 ++ .../x/crypto/pkcs12/internal/rc2/rc2_test.go | 93 + vendor/golang.org/x/crypto/pkcs12/mac.go | 45 + vendor/golang.org/x/crypto/pkcs12/mac_test.go | 42 + vendor/golang.org/x/crypto/pkcs12/pbkdf.go | 170 + .../golang.org/x/crypto/pkcs12/pbkdf_test.go | 34 + vendor/golang.org/x/crypto/pkcs12/pkcs12.go | 346 ++ .../golang.org/x/crypto/pkcs12/pkcs12_test.go | 138 + vendor/golang.org/x/crypto/pkcs12/safebags.go | 57 + .../golang.org/x/crypto/poly1305/poly1305.go | 33 + .../x/crypto/poly1305/poly1305_test.go | 159 + .../golang.org/x/crypto/poly1305/sum_amd64.go | 22 + .../golang.org/x/crypto/poly1305/sum_amd64.s | 125 + .../golang.org/x/crypto/poly1305/sum_arm.go | 22 + vendor/golang.org/x/crypto/poly1305/sum_arm.s | 427 ++ .../golang.org/x/crypto/poly1305/sum_ref.go | 141 + .../x/crypto/ripemd160/ripemd160.go | 120 + .../x/crypto/ripemd160/ripemd160_test.go | 64 + .../x/crypto/ripemd160/ripemd160block.go | 161 + .../x/crypto/salsa20/salsa/hsalsa20.go | 144 + .../x/crypto/salsa20/salsa/salsa2020_amd64.s | 889 ++++ .../x/crypto/salsa20/salsa/salsa208.go | 199 + .../x/crypto/salsa20/salsa/salsa20_amd64.go | 24 + .../x/crypto/salsa20/salsa/salsa20_ref.go | 234 ++ .../x/crypto/salsa20/salsa/salsa_test.go | 54 + vendor/golang.org/x/crypto/salsa20/salsa20.go | 54 + .../x/crypto/salsa20/salsa20_test.go | 139 + vendor/golang.org/x/crypto/scrypt/scrypt.go | 243 ++ .../golang.org/x/crypto/scrypt/scrypt_test.go | 160 + vendor/golang.org/x/crypto/sha3/doc.go | 66 + vendor/golang.org/x/crypto/sha3/hashes.go | 65 + vendor/golang.org/x/crypto/sha3/keccakf.go | 412 ++ .../golang.org/x/crypto/sha3/keccakf_amd64.go | 13 + .../golang.org/x/crypto/sha3/keccakf_amd64.s | 390 ++ vendor/golang.org/x/crypto/sha3/register.go | 18 + vendor/golang.org/x/crypto/sha3/sha3.go | 193 + vendor/golang.org/x/crypto/sha3/sha3_test.go | 311 ++ vendor/golang.org/x/crypto/sha3/shake.go | 60 + .../sha3/testdata/keccakKats.json.deflate | Bin 0 -> 521342 bytes vendor/golang.org/x/crypto/sha3/xor.go | 16 + .../golang.org/x/crypto/sha3/xor_generic.go | 28 + .../golang.org/x/crypto/sha3/xor_unaligned.go | 58 + .../golang.org/x/crypto/ssh/agent/client.go | 683 ++++ .../x/crypto/ssh/agent/client_test.go | 379 ++ .../x/crypto/ssh/agent/example_test.go | 41 + .../golang.org/x/crypto/ssh/agent/forward.go | 103 + .../golang.org/x/crypto/ssh/agent/keyring.go | 215 + .../x/crypto/ssh/agent/keyring_test.go | 76 + .../golang.org/x/crypto/ssh/agent/server.go | 523 +++ .../x/crypto/ssh/agent/server_test.go | 259 ++ .../x/crypto/ssh/agent/testdata_test.go | 64 + .../golang.org/x/crypto/ssh/benchmark_test.go | 122 + vendor/golang.org/x/crypto/ssh/buffer.go | 98 + vendor/golang.org/x/crypto/ssh/buffer_test.go | 87 + vendor/golang.org/x/crypto/ssh/certs.go | 519 +++ vendor/golang.org/x/crypto/ssh/certs_test.go | 222 + vendor/golang.org/x/crypto/ssh/channel.go | 633 +++ vendor/golang.org/x/crypto/ssh/cipher.go | 629 +++ vendor/golang.org/x/crypto/ssh/cipher_test.go | 129 + vendor/golang.org/x/crypto/ssh/client.go | 257 ++ vendor/golang.org/x/crypto/ssh/client_auth.go | 486 +++ .../x/crypto/ssh/client_auth_test.go | 628 +++ vendor/golang.org/x/crypto/ssh/client_test.go | 81 + vendor/golang.org/x/crypto/ssh/common.go | 373 ++ vendor/golang.org/x/crypto/ssh/connection.go | 143 + vendor/golang.org/x/crypto/ssh/doc.go | 21 + .../golang.org/x/crypto/ssh/example_test.go | 320 ++ vendor/golang.org/x/crypto/ssh/handshake.go | 640 +++ .../golang.org/x/crypto/ssh/handshake_test.go | 559 +++ vendor/golang.org/x/crypto/ssh/kex.go | 540 +++ vendor/golang.org/x/crypto/ssh/kex_test.go | 50 + vendor/golang.org/x/crypto/ssh/keys.go | 1006 +++++ vendor/golang.org/x/crypto/ssh/keys_test.go | 500 +++ .../x/crypto/ssh/knownhosts/knownhosts.go | 546 +++ .../crypto/ssh/knownhosts/knownhosts_test.go | 329 ++ vendor/golang.org/x/crypto/ssh/mac.go | 61 + .../golang.org/x/crypto/ssh/mempipe_test.go | 110 + vendor/golang.org/x/crypto/ssh/messages.go | 758 ++++ .../golang.org/x/crypto/ssh/messages_test.go | 288 ++ vendor/golang.org/x/crypto/ssh/mux.go | 330 ++ vendor/golang.org/x/crypto/ssh/mux_test.go | 505 +++ vendor/golang.org/x/crypto/ssh/server.go | 563 +++ vendor/golang.org/x/crypto/ssh/session.go | 647 +++ .../golang.org/x/crypto/ssh/session_test.go | 774 ++++ vendor/golang.org/x/crypto/ssh/streamlocal.go | 115 + vendor/golang.org/x/crypto/ssh/tcpip.go | 465 +++ vendor/golang.org/x/crypto/ssh/tcpip_test.go | 20 + .../x/crypto/ssh/terminal/terminal.go | 951 +++++ .../x/crypto/ssh/terminal/terminal_test.go | 350 ++ .../golang.org/x/crypto/ssh/terminal/util.go | 119 + .../x/crypto/ssh/terminal/util_bsd.go | 12 + .../x/crypto/ssh/terminal/util_linux.go | 10 + .../x/crypto/ssh/terminal/util_plan9.go | 58 + .../x/crypto/ssh/terminal/util_solaris.go | 128 + .../x/crypto/ssh/terminal/util_windows.go | 102 + .../x/crypto/ssh/test/agent_unix_test.go | 59 + .../golang.org/x/crypto/ssh/test/cert_test.go | 77 + .../x/crypto/ssh/test/dial_unix_test.go | 128 + vendor/golang.org/x/crypto/ssh/test/doc.go | 7 + .../x/crypto/ssh/test/forward_unix_test.go | 194 + .../x/crypto/ssh/test/session_test.go | 413 ++ .../x/crypto/ssh/test/test_unix_test.go | 295 ++ .../x/crypto/ssh/test/testdata_test.go | 64 + .../golang.org/x/crypto/ssh/testdata/doc.go | 8 + .../golang.org/x/crypto/ssh/testdata/keys.go | 177 + .../golang.org/x/crypto/ssh/testdata_test.go | 63 + vendor/golang.org/x/crypto/ssh/transport.go | 375 ++ .../golang.org/x/crypto/ssh/transport_test.go | 109 + vendor/golang.org/x/crypto/tea/cipher.go | 109 + vendor/golang.org/x/crypto/tea/tea_test.go | 93 + vendor/golang.org/x/crypto/twofish/twofish.go | 342 ++ .../x/crypto/twofish/twofish_test.go | 129 + vendor/golang.org/x/crypto/xtea/block.go | 66 + vendor/golang.org/x/crypto/xtea/cipher.go | 82 + vendor/golang.org/x/crypto/xtea/xtea_test.go | 229 ++ vendor/golang.org/x/crypto/xts/xts.go | 137 + vendor/golang.org/x/crypto/xts/xts_test.go | 105 + vendor/golang.org/x/sys/.gitattributes | 10 + vendor/golang.org/x/sys/.gitignore | 2 + vendor/golang.org/x/sys/AUTHORS | 3 + vendor/golang.org/x/sys/CONTRIBUTING.md | 31 + vendor/golang.org/x/sys/CONTRIBUTORS | 3 + vendor/golang.org/x/sys/README | 3 + vendor/golang.org/x/sys/codereview.cfg | 1 + vendor/golang.org/x/sys/plan9/asm.s | 8 + vendor/golang.org/x/sys/plan9/asm_plan9_386.s | 30 + .../golang.org/x/sys/plan9/asm_plan9_amd64.s | 30 + vendor/golang.org/x/sys/plan9/const_plan9.go | 70 + vendor/golang.org/x/sys/plan9/dir_plan9.go | 212 + vendor/golang.org/x/sys/plan9/env_plan9.go | 27 + vendor/golang.org/x/sys/plan9/env_unset.go | 14 + vendor/golang.org/x/sys/plan9/errors_plan9.go | 50 + vendor/golang.org/x/sys/plan9/mkall.sh | 138 + vendor/golang.org/x/sys/plan9/mkerrors.sh | 246 ++ vendor/golang.org/x/sys/plan9/mksyscall.pl | 319 ++ .../golang.org/x/sys/plan9/mksysnum_plan9.sh | 23 + .../golang.org/x/sys/plan9/pwd_go15_plan9.go | 21 + vendor/golang.org/x/sys/plan9/pwd_plan9.go | 23 + vendor/golang.org/x/sys/plan9/race.go | 30 + vendor/golang.org/x/sys/plan9/race0.go | 25 + vendor/golang.org/x/sys/plan9/str.go | 22 + vendor/golang.org/x/sys/plan9/syscall.go | 74 + .../golang.org/x/sys/plan9/syscall_plan9.go | 349 ++ vendor/golang.org/x/sys/plan9/syscall_test.go | 33 + .../x/sys/plan9/zsyscall_plan9_386.go | 292 ++ .../x/sys/plan9/zsyscall_plan9_amd64.go | 292 ++ .../golang.org/x/sys/plan9/zsysnum_plan9.go | 49 + vendor/golang.org/x/sys/unix/.gitignore | 1 + vendor/golang.org/x/sys/unix/README.md | 173 + .../golang.org/x/sys/unix/asm_openbsd_arm.s | 29 + .../golang.org/x/sys/unix/asm_solaris_amd64.s | 4 +- vendor/golang.org/x/sys/unix/cap_freebsd.go | 195 + vendor/golang.org/x/sys/unix/creds_test.go | 121 + vendor/golang.org/x/sys/unix/dev_linux.go | 42 + .../golang.org/x/sys/unix/dev_linux_test.go | 51 + vendor/golang.org/x/sys/unix/dirent.go | 102 + vendor/golang.org/x/sys/unix/endian_big.go | 9 + vendor/golang.org/x/sys/unix/endian_little.go | 9 + .../x/sys/unix/errors_freebsd_386.go | 227 ++ .../x/sys/unix/errors_freebsd_amd64.go | 227 ++ .../x/sys/unix/errors_freebsd_arm.go | 226 + vendor/golang.org/x/sys/unix/export_test.go | 9 + vendor/golang.org/x/sys/unix/file_unix.go | 27 + vendor/golang.org/x/sys/unix/flock.go | 2 - vendor/golang.org/x/sys/unix/linux/Dockerfile | 48 + vendor/golang.org/x/sys/unix/linux/mkall.go | 379 ++ .../x/sys/unix/linux/mksysnum.pl} | 37 +- .../x/sys/unix/linux/types.go} | 121 +- vendor/golang.org/x/sys/unix/mkall.sh | 165 +- vendor/golang.org/x/sys/unix/mkerrors.sh | 72 +- vendor/golang.org/x/sys/unix/mkpost.go | 74 +- vendor/golang.org/x/sys/unix/mksyscall.pl | 12 +- .../x/sys/unix/mksyscall_solaris.pl | 2 +- .../golang.org/x/sys/unix/mksysnum_darwin.pl | 2 +- .../x/sys/unix/mksysnum_dragonfly.pl | 2 +- .../golang.org/x/sys/unix/mksysnum_freebsd.pl | 15 +- .../golang.org/x/sys/unix/mksysnum_netbsd.pl | 2 +- .../golang.org/x/sys/unix/mksysnum_openbsd.pl | 2 +- .../golang.org/x/sys/unix/mmap_unix_test.go | 23 + vendor/golang.org/x/sys/unix/openbsd_test.go | 113 + vendor/golang.org/x/sys/unix/sockcmsg_unix.go | 9 +- vendor/golang.org/x/sys/unix/syscall_bsd.go | 20 +- .../golang.org/x/sys/unix/syscall_bsd_test.go | 62 + .../golang.org/x/sys/unix/syscall_darwin.go | 92 +- .../x/sys/unix/syscall_darwin_amd64.go | 2 - .../x/sys/unix/syscall_dragonfly.go | 65 +- .../golang.org/x/sys/unix/syscall_freebsd.go | 89 +- .../x/sys/unix/syscall_freebsd_test.go | 297 ++ vendor/golang.org/x/sys/unix/syscall_linux.go | 234 +- .../x/sys/unix/syscall_linux_mips64x.go | 5 +- .../x/sys/unix/syscall_linux_mipsx.go | 4 +- .../x/sys/unix/syscall_linux_test.go | 227 ++ .../golang.org/x/sys/unix/syscall_netbsd.go | 37 +- .../golang.org/x/sys/unix/syscall_openbsd.go | 38 +- .../x/sys/unix/syscall_openbsd_arm.go | 44 + .../golang.org/x/sys/unix/syscall_solaris.go | 81 +- .../x/sys/unix/syscall_solaris_test.go | 34 + vendor/golang.org/x/sys/unix/syscall_test.go | 50 + vendor/golang.org/x/sys/unix/syscall_unix.go | 1 + .../x/sys/unix/syscall_unix_test.go | 345 ++ vendor/golang.org/x/sys/unix/types_darwin.go | 6 +- .../golang.org/x/sys/unix/types_dragonfly.go | 9 +- vendor/golang.org/x/sys/unix/types_freebsd.go | 21 +- vendor/golang.org/x/sys/unix/types_netbsd.go | 9 +- vendor/golang.org/x/sys/unix/types_openbsd.go | 9 +- vendor/golang.org/x/sys/unix/types_solaris.go | 9 +- .../x/sys/unix/zerrors_darwin_386.go | 103 +- .../x/sys/unix/zerrors_darwin_amd64.go | 103 +- .../x/sys/unix/zerrors_darwin_arm.go | 392 +- .../x/sys/unix/zerrors_darwin_arm64.go | 103 +- .../x/sys/unix/zerrors_dragonfly_amd64.go | 56 +- .../x/sys/unix/zerrors_freebsd_386.go | 2865 +++++++------ .../x/sys/unix/zerrors_freebsd_amd64.go | 2871 +++++++------ .../x/sys/unix/zerrors_freebsd_arm.go | 2860 +++++++------ .../x/sys/unix/zerrors_linux_386.go | 3355 ++++++++------- .../x/sys/unix/zerrors_linux_amd64.go | 3364 ++++++++------- .../x/sys/unix/zerrors_linux_arm.go | 3288 ++++++++------- .../x/sys/unix/zerrors_linux_arm64.go | 3421 ++++++++-------- .../x/sys/unix/zerrors_linux_mips.go | 3338 ++++++++------- .../x/sys/unix/zerrors_linux_mips64.go | 3430 ++++++++-------- .../x/sys/unix/zerrors_linux_mips64le.go | 3430 ++++++++-------- .../x/sys/unix/zerrors_linux_mipsle.go | 3531 ++++++++-------- .../x/sys/unix/zerrors_linux_ppc64.go | 3565 ++++++++-------- .../x/sys/unix/zerrors_linux_ppc64le.go | 3561 ++++++++-------- .../x/sys/unix/zerrors_linux_s390x.go | 3619 +++++++++-------- .../x/sys/unix/zerrors_openbsd_arm.go | 1586 ++++++++ .../x/sys/unix/zerrors_solaris_amd64.go | 49 +- .../x/sys/unix/zsyscall_darwin_386.go | 201 +- .../x/sys/unix/zsyscall_darwin_amd64.go | 216 +- .../x/sys/unix/zsyscall_darwin_arm.go | 189 +- .../x/sys/unix/zsyscall_darwin_arm64.go | 185 +- .../x/sys/unix/zsyscall_dragonfly_amd64.go | 28 +- .../x/sys/unix/zsyscall_freebsd_386.go | 230 +- .../x/sys/unix/zsyscall_freebsd_amd64.go | 230 +- .../x/sys/unix/zsyscall_freebsd_arm.go | 230 +- .../x/sys/unix/zsyscall_linux_386.go | 336 +- .../x/sys/unix/zsyscall_linux_amd64.go | 336 +- .../x/sys/unix/zsyscall_linux_arm.go | 336 +- .../x/sys/unix/zsyscall_linux_arm64.go | 336 +- .../x/sys/unix/zsyscall_linux_mips.go | 336 +- .../x/sys/unix/zsyscall_linux_mips64.go | 346 +- .../x/sys/unix/zsyscall_linux_mips64le.go | 346 +- .../x/sys/unix/zsyscall_linux_mipsle.go | 336 +- .../x/sys/unix/zsyscall_linux_ppc64.go | 336 +- .../x/sys/unix/zsyscall_linux_ppc64le.go | 336 +- .../x/sys/unix/zsyscall_linux_s390x.go | 336 +- .../x/sys/unix/zsyscall_linux_sparc64.go | 13 +- .../x/sys/unix/zsyscall_netbsd_386.go | 17 +- .../x/sys/unix/zsyscall_netbsd_amd64.go | 17 +- .../x/sys/unix/zsyscall_netbsd_arm.go | 19 +- .../x/sys/unix/zsyscall_openbsd_386.go | 17 +- .../x/sys/unix/zsyscall_openbsd_amd64.go | 17 +- .../x/sys/unix/zsyscall_openbsd_arm.go | 1372 +++++++ .../x/sys/unix/zsyscall_solaris_amd64.go | 114 +- .../x/sys/unix/zsysnum_darwin_arm.go | 110 +- .../x/sys/unix/zsysnum_darwin_arm64.go | 50 +- .../x/sys/unix/zsysnum_dragonfly_amd64.go | 21 +- .../x/sys/unix/zsysnum_freebsd_386.go | 686 ++-- .../x/sys/unix/zsysnum_freebsd_amd64.go | 686 ++-- .../x/sys/unix/zsysnum_freebsd_arm.go | 686 ++-- .../x/sys/unix/zsysnum_linux_386.go | 4 +- .../x/sys/unix/zsysnum_linux_amd64.go | 4 +- .../x/sys/unix/zsysnum_linux_arm.go | 4 +- .../x/sys/unix/zsysnum_linux_arm64.go | 4 +- .../x/sys/unix/zsysnum_linux_mips.go | 4 +- .../x/sys/unix/zsysnum_linux_mips64.go | 4 +- .../x/sys/unix/zsysnum_linux_mips64le.go | 4 +- .../x/sys/unix/zsysnum_linux_mipsle.go | 4 +- .../x/sys/unix/zsysnum_linux_ppc64.go | 4 +- .../x/sys/unix/zsysnum_linux_ppc64le.go | 4 +- .../x/sys/unix/zsysnum_linux_s390x.go | 4 +- .../x/sys/unix/zsysnum_openbsd_arm.go | 213 + .../x/sys/unix/ztypes_darwin_386.go | 19 +- .../x/sys/unix/ztypes_darwin_amd64.go | 14 +- .../x/sys/unix/ztypes_darwin_arm.go | 14 + .../x/sys/unix/ztypes_darwin_arm64.go | 14 + .../x/sys/unix/ztypes_dragonfly_amd64.go | 11 +- .../x/sys/unix/ztypes_freebsd_386.go | 79 +- .../x/sys/unix/ztypes_freebsd_amd64.go | 75 +- .../x/sys/unix/ztypes_freebsd_arm.go | 87 +- .../golang.org/x/sys/unix/ztypes_linux_386.go | 59 +- .../x/sys/unix/ztypes_linux_amd64.go | 87 +- .../golang.org/x/sys/unix/ztypes_linux_arm.go | 59 +- .../x/sys/unix/ztypes_linux_arm64.go | 89 +- .../x/sys/unix/ztypes_linux_mips.go | 74 +- .../x/sys/unix/ztypes_linux_mips64.go | 84 +- .../x/sys/unix/ztypes_linux_mips64le.go | 84 +- .../x/sys/unix/ztypes_linux_mipsle.go | 74 +- .../x/sys/unix/ztypes_linux_ppc64.go | 91 +- .../x/sys/unix/ztypes_linux_ppc64le.go | 91 +- .../x/sys/unix/ztypes_linux_s390x.go | 59 +- .../x/sys/unix/ztypes_netbsd_386.go | 5 + .../x/sys/unix/ztypes_netbsd_amd64.go | 5 + .../x/sys/unix/ztypes_netbsd_arm.go | 5 + .../x/sys/unix/ztypes_openbsd_386.go | 5 + .../x/sys/unix/ztypes_openbsd_amd64.go | 5 + .../x/sys/unix/ztypes_openbsd_arm.go | 439 ++ .../x/sys/unix/ztypes_solaris_amd64.go | 23 +- .../x/sys/windows/asm_windows_386.s | 13 + .../x/sys/windows/asm_windows_amd64.s | 13 + .../golang.org/x/sys/windows/dll_windows.go | 377 ++ vendor/golang.org/x/sys/windows/env_unset.go | 15 + .../golang.org/x/sys/windows/env_windows.go | 25 + vendor/golang.org/x/sys/windows/eventlog.go | 20 + .../golang.org/x/sys/windows/exec_windows.go | 97 + .../x/sys/windows/memory_windows.go | 26 + vendor/golang.org/x/sys/windows/mksyscall.go | 7 + vendor/golang.org/x/sys/windows/race.go | 30 + vendor/golang.org/x/sys/windows/race0.go | 25 + .../x/sys/windows/registry/export_test.go | 11 + .../golang.org/x/sys/windows/registry/key.go | 200 + .../x/sys/windows/registry/mksyscall.go | 7 + .../x/sys/windows/registry/registry_test.go | 756 ++++ .../x/sys/windows/registry/syscall.go | 32 + .../x/sys/windows/registry/value.go | 384 ++ .../sys/windows/registry/zsyscall_windows.go | 120 + .../x/sys/windows/security_windows.go | 435 ++ vendor/golang.org/x/sys/windows/service.go | 164 + vendor/golang.org/x/sys/windows/str.go | 22 + .../golang.org/x/sys/windows/svc/debug/log.go | 56 + .../x/sys/windows/svc/debug/service.go | 45 + vendor/golang.org/x/sys/windows/svc/event.go | 48 + .../x/sys/windows/svc/eventlog/install.go | 80 + .../x/sys/windows/svc/eventlog/log.go | 70 + .../x/sys/windows/svc/eventlog/log_test.go | 51 + .../x/sys/windows/svc/example/beep.go | 22 + .../x/sys/windows/svc/example/install.go | 92 + .../x/sys/windows/svc/example/main.go | 76 + .../x/sys/windows/svc/example/manage.go | 62 + .../x/sys/windows/svc/example/service.go | 82 + vendor/golang.org/x/sys/windows/svc/go12.c | 24 + vendor/golang.org/x/sys/windows/svc/go12.go | 11 + vendor/golang.org/x/sys/windows/svc/go13.go | 31 + .../x/sys/windows/svc/mgr/config.go | 139 + .../golang.org/x/sys/windows/svc/mgr/mgr.go | 162 + .../x/sys/windows/svc/mgr/mgr_test.go | 169 + .../x/sys/windows/svc/mgr/service.go | 72 + .../golang.org/x/sys/windows/svc/security.go | 62 + .../golang.org/x/sys/windows/svc/service.go | 363 ++ .../golang.org/x/sys/windows/svc/svc_test.go | 118 + vendor/golang.org/x/sys/windows/svc/sys_386.s | 68 + .../golang.org/x/sys/windows/svc/sys_amd64.s | 42 + vendor/golang.org/x/sys/windows/syscall.go | 71 + .../golang.org/x/sys/windows/syscall_test.go | 33 + .../x/sys/windows/syscall_windows.go | 1000 +++++ .../x/sys/windows/syscall_windows_test.go | 107 + .../golang.org/x/sys/windows/types_windows.go | 1282 ++++++ .../x/sys/windows/types_windows_386.go | 22 + .../x/sys/windows/types_windows_amd64.go | 22 + .../x/sys/windows/zsyscall_windows.go | 2368 +++++++++++ vendor/gopkg.in/yaml.v2/.travis.yml | 9 + vendor/gopkg.in/yaml.v2/LICENSE | 201 + .../gopkg.in/yaml.v2/LICENSE.libyaml | 0 .../vendor => }/gopkg.in/yaml.v2/README.md | 2 + .../test/vendor => }/gopkg.in/yaml.v2/apic.go | 0 .../vendor => }/gopkg.in/yaml.v2/decode.go | 8 +- vendor/gopkg.in/yaml.v2/decode_test.go | 1017 +++++ .../vendor => }/gopkg.in/yaml.v2/emitterc.go | 9 +- .../vendor => }/gopkg.in/yaml.v2/encode.go | 0 vendor/gopkg.in/yaml.v2/encode_test.go | 501 +++ .../gopkg.in/yaml.v2/example_embedded_test.go | 41 + .../vendor => }/gopkg.in/yaml.v2/parserc.go | 1 - .../vendor => }/gopkg.in/yaml.v2/readerc.go | 0 .../vendor => }/gopkg.in/yaml.v2/resolve.go | 11 +- .../vendor => }/gopkg.in/yaml.v2/scannerc.go | 11 +- .../vendor => }/gopkg.in/yaml.v2/sorter.go | 0 vendor/gopkg.in/yaml.v2/suite_test.go | 12 + .../vendor => }/gopkg.in/yaml.v2/writerc.go | 0 .../test/vendor => }/gopkg.in/yaml.v2/yaml.go | 13 +- .../vendor => }/gopkg.in/yaml.v2/yamlh.go | 2 +- .../gopkg.in/yaml.v2/yamlprivateh.go | 0 1606 files changed, 242712 insertions(+), 43970 deletions(-) create mode 100644 Makefile rename {hostnic => cmd/hostnic}/hostnic.go (96%) rename {tools => cmd}/niccleaner/main.go (100%) create mode 100755 generate_version.sh create mode 100644 glide.lock create mode 100644 glide.yaml create mode 100644 pkg/version.go create mode 100644 vendor/github.com/containernetworking/cni/.gitignore create mode 100644 vendor/github.com/containernetworking/cni/.travis.yml create mode 100644 vendor/github.com/containernetworking/cni/CODE-OF-CONDUCT.md delete mode 100644 vendor/github.com/containernetworking/cni/Documentation/host-local.md create mode 100644 vendor/github.com/containernetworking/cni/RELEASING.md create mode 100644 vendor/github.com/containernetworking/cni/libcni/api_test.go create mode 100644 vendor/github.com/containernetworking/cni/libcni/backwards_compatibility_test.go create mode 100644 vendor/github.com/containernetworking/cni/libcni/conf_test.go create mode 100644 vendor/github.com/containernetworking/cni/libcni/libcni_suite_test.go create mode 100644 vendor/github.com/containernetworking/cni/logo.png create mode 100644 vendor/github.com/containernetworking/cni/pkg/invoke/args_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/invoke/delegate_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/invoke/exec_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/invoke/find_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/invoke/get_version_integration_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/invoke/invoke_suite_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/invoke/raw_exec_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/skel/skel_suite_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/skel/skel_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/types/020/types_suite_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/types/020/types_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/types/args_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/types/current/types_suite_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/types/current/types_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/types/types_suite_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/version/conf_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/version/legacy_examples/legacy_examples_suite_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/version/legacy_examples/legacy_examples_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/version/plugin_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/version/reconcile_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/version/testhelpers/testhelpers_suite_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/version/testhelpers/testhelpers_test.go create mode 100644 vendor/github.com/containernetworking/cni/pkg/version/version_suite_test.go delete mode 100644 vendor/github.com/containernetworking/cni/plugins/ipam/host-local/backend/allocator/allocator.go delete mode 100644 vendor/github.com/containernetworking/cni/plugins/ipam/host-local/backend/allocator/config.go delete mode 100644 vendor/github.com/containernetworking/cni/plugins/ipam/host-local/main.go create mode 100644 vendor/github.com/containernetworking/cni/plugins/test/noop/noop_suite_test.go create mode 100644 vendor/github.com/containernetworking/cni/plugins/test/noop/noop_test.go delete mode 100755 vendor/github.com/containernetworking/cni/scripts/release-with-rkt.sh create mode 100755 vendor/github.com/containernetworking/cni/scripts/release.sh create mode 100644 vendor/github.com/containernetworking/cni/vendor/github.com/onsi/ginkgo/.gitignore create mode 100644 vendor/github.com/containernetworking/cni/vendor/github.com/onsi/ginkgo/.travis.yml create mode 100644 vendor/github.com/containernetworking/cni/vendor/github.com/onsi/gomega/.gitignore create mode 100644 vendor/github.com/containernetworking/cni/vendor/github.com/onsi/gomega/.travis.yml create mode 100644 vendor/github.com/containernetworking/plugins/.gitignore create mode 100644 vendor/github.com/containernetworking/plugins/.travis.yml create mode 100644 vendor/github.com/containernetworking/plugins/CONTRIBUTING.md create mode 100644 vendor/github.com/containernetworking/plugins/Godeps/Godeps.json create mode 100644 vendor/github.com/containernetworking/plugins/Godeps/Readme create mode 100644 vendor/github.com/containernetworking/plugins/LICENSE create mode 100644 vendor/github.com/containernetworking/plugins/README.md create mode 100644 vendor/github.com/containernetworking/plugins/RELEASING.md create mode 100644 vendor/github.com/containernetworking/plugins/Vagrantfile create mode 100755 vendor/github.com/containernetworking/plugins/build.sh create mode 100644 vendor/github.com/containernetworking/plugins/pkg/ip/addr.go rename vendor/github.com/containernetworking/{cni => plugins}/pkg/ip/cidr.go (87%) create mode 100644 vendor/github.com/containernetworking/plugins/pkg/ip/ip_suite_test.go create mode 100644 vendor/github.com/containernetworking/plugins/pkg/ip/ipforward.go rename vendor/github.com/containernetworking/{cni => plugins}/pkg/ip/ipmasq.go (60%) rename vendor/github.com/containernetworking/{cni => plugins}/pkg/ip/link.go (98%) create mode 100644 vendor/github.com/containernetworking/plugins/pkg/ip/link_test.go rename vendor/github.com/containernetworking/{cni => plugins}/pkg/ip/route.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/pkg/ip/route_linux.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/pkg/ip/route_unspecified.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/pkg/ipam/ipam.go (91%) create mode 100644 vendor/github.com/containernetworking/plugins/pkg/ipam/ipam_suite_test.go create mode 100644 vendor/github.com/containernetworking/plugins/pkg/ipam/ipam_test.go rename vendor/github.com/containernetworking/{cni => plugins}/pkg/ns/README.md (72%) rename vendor/github.com/containernetworking/{cni => plugins}/pkg/ns/ns.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/pkg/ns/ns_linux.go (97%) create mode 100644 vendor/github.com/containernetworking/plugins/pkg/ns/ns_suite_test.go create mode 100644 vendor/github.com/containernetworking/plugins/pkg/ns/ns_test.go rename vendor/github.com/containernetworking/{cni => plugins}/pkg/ns/ns_unspecified.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/pkg/testutils/bad_reader.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/pkg/testutils/cmd.go (100%) create mode 100644 vendor/github.com/containernetworking/plugins/pkg/testutils/ping.go rename vendor/github.com/containernetworking/{cni => plugins}/pkg/utils/hwaddr/hwaddr.go (100%) create mode 100644 vendor/github.com/containernetworking/plugins/pkg/utils/hwaddr/hwaddr_suite_test.go create mode 100644 vendor/github.com/containernetworking/plugins/pkg/utils/hwaddr/hwaddr_test.go rename vendor/github.com/containernetworking/{cni => plugins}/pkg/utils/sysctl/sysctl_linux.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/pkg/utils/utils.go (100%) create mode 100644 vendor/github.com/containernetworking/plugins/pkg/utils/utils_suite_test.go create mode 100644 vendor/github.com/containernetworking/plugins/pkg/utils/utils_test.go rename vendor/github.com/containernetworking/{cni/Documentation/dhcp.md => plugins/plugins/ipam/dhcp/README.md} (86%) rename vendor/github.com/containernetworking/{cni => plugins}/plugins/ipam/dhcp/daemon.go (88%) rename vendor/github.com/containernetworking/{cni => plugins}/plugins/ipam/dhcp/lease.go (99%) rename vendor/github.com/containernetworking/{cni => plugins}/plugins/ipam/dhcp/main.go (87%) rename vendor/github.com/containernetworking/{cni => plugins}/plugins/ipam/dhcp/options.go (100%) create mode 100644 vendor/github.com/containernetworking/plugins/plugins/ipam/dhcp/options_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/README.md create mode 100644 vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/allocator/allocator.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/allocator/allocator_suite_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/allocator/allocator_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/allocator/config.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/allocator/config_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/allocator/range.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/allocator/range_set.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/allocator/range_set_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/allocator/range_test.go rename vendor/github.com/containernetworking/{cni => plugins}/plugins/ipam/host-local/backend/disk/backend.go (80%) rename vendor/github.com/containernetworking/{cni => plugins}/plugins/ipam/host-local/backend/disk/lock.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/plugins/ipam/host-local/backend/store.go (87%) rename vendor/github.com/containernetworking/{cni => plugins}/plugins/ipam/host-local/backend/testing/fake_store.go (70%) rename vendor/github.com/containernetworking/{cni => plugins}/plugins/ipam/host-local/dns.go (100%) create mode 100644 vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/dns_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/host_local_suite_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/host_local_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/main.go rename vendor/github.com/containernetworking/{cni/Documentation/bridge.md => plugins/plugins/main/bridge/README.md} (95%) rename vendor/github.com/containernetworking/{cni => plugins}/plugins/main/bridge/bridge.go (66%) create mode 100644 vendor/github.com/containernetworking/plugins/plugins/main/bridge/bridge_suite_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/main/bridge/bridge_test.go rename vendor/github.com/containernetworking/{cni/Documentation/ipvlan.md => plugins/plugins/main/ipvlan/README.md} (100%) rename vendor/github.com/containernetworking/{cni => plugins}/plugins/main/ipvlan/ipvlan.go (96%) create mode 100644 vendor/github.com/containernetworking/plugins/plugins/main/ipvlan/ipvlan_suite_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/main/ipvlan/ipvlan_test.go rename vendor/github.com/containernetworking/{cni => plugins}/plugins/main/loopback/loopback.go (97%) create mode 100644 vendor/github.com/containernetworking/plugins/plugins/main/loopback/loopback_suite_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/main/loopback/loopback_test.go rename vendor/github.com/containernetworking/{cni/Documentation/macvlan.md => plugins/plugins/main/macvlan/README.md} (100%) rename vendor/github.com/containernetworking/{cni => plugins}/plugins/main/macvlan/macvlan.go (87%) create mode 100644 vendor/github.com/containernetworking/plugins/plugins/main/macvlan/macvlan_suite_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/main/macvlan/macvlan_test.go rename vendor/github.com/containernetworking/{cni/Documentation/ptp.md => plugins/plugins/main/ptp/README.md} (92%) rename vendor/github.com/containernetworking/{cni => plugins}/plugins/main/ptp/ptp.go (86%) create mode 100644 vendor/github.com/containernetworking/plugins/plugins/main/ptp/ptp_suite_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/main/ptp/ptp_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/main/vlan/vlan.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/main/vlan/vlan_suite_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/main/vlan/vlan_test.go rename vendor/github.com/containernetworking/{cni/Documentation/flannel.md => plugins/plugins/meta/flannel/README.md} (100%) rename vendor/github.com/containernetworking/{cni => plugins}/plugins/meta/flannel/flannel.go (98%) rename vendor/github.com/containernetworking/{cni/pkg/ip/ipforward.go => plugins/plugins/meta/flannel/flannel_suite_test.go} (68%) create mode 100644 vendor/github.com/containernetworking/plugins/plugins/meta/flannel/flannel_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/meta/portmap/README.md create mode 100644 vendor/github.com/containernetworking/plugins/plugins/meta/portmap/chain.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/meta/portmap/chain_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/meta/portmap/main.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/meta/portmap/portmap.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/meta/portmap/portmap_integ_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/meta/portmap/portmap_suite_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/meta/portmap/portmap_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/meta/portmap/utils.go rename vendor/github.com/containernetworking/{cni/Documentation/tuning.md => plugins/plugins/meta/tuning/README.md} (100%) rename vendor/github.com/containernetworking/{cni => plugins}/plugins/meta/tuning/tuning.go (64%) create mode 100644 vendor/github.com/containernetworking/plugins/plugins/meta/tuning/tuning_suite_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/meta/tuning/tuning_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/sample/README.md create mode 100644 vendor/github.com/containernetworking/plugins/plugins/sample/main.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/sample/sample_suite_test.go create mode 100644 vendor/github.com/containernetworking/plugins/plugins/sample/sample_test.go create mode 100755 vendor/github.com/containernetworking/plugins/scripts/release.sh create mode 100755 vendor/github.com/containernetworking/plugins/test.sh rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/coreos/go-iptables/LICENSE (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/coreos/go-iptables/iptables/iptables.go (62%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/coreos/go-iptables/iptables/lock.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/coreos/go-systemd/LICENSE (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/coreos/go-systemd/activation/files.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/coreos/go-systemd/activation/listeners.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/coreos/go-systemd/activation/packetconns.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/d2g/dhcp4/LICENSE (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/d2g/dhcp4/README.md (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/d2g/dhcp4/constants.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/d2g/dhcp4/helpers.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/d2g/dhcp4/option.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/d2g/dhcp4/packet.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/d2g/dhcp4client/LICENSE (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/d2g/dhcp4client/README.md (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/d2g/dhcp4client/client.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/d2g/dhcp4client/inetsock.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/d2g/dhcp4client/init.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/github.com/d2g/dhcp4client/pktsock_linux.go (100%) create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/j-keck/arping/.gitignore create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/j-keck/arping/LICENSE create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/j-keck/arping/README.md create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/j-keck/arping/arp_datagram.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/j-keck/arping/arping.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/j-keck/arping/arping_bsd.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/j-keck/arping/arping_linux.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/j-keck/arping/arping_windows.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/j-keck/arping/netutils.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/mattn/go-shellwords/.travis.yml create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/mattn/go-shellwords/LICENSE create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/mattn/go-shellwords/README.md create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/mattn/go-shellwords/shellwords.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/mattn/go-shellwords/util_posix.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/mattn/go-shellwords/util_windows.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/.gitignore create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/.travis.yml create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/CHANGELOG.md rename vendor/github.com/{ => containernetworking/plugins/vendor/github.com}/onsi/ginkgo/LICENSE (100%) create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/README.md create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/config/config.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/extensions/table/table.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/extensions/table/table_entry.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/ginkgo_dsl.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/codelocation/code_location.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/containernode/container_node.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/failer/failer.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/leafnodes/benchmarker.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/leafnodes/interfaces.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/leafnodes/it_node.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/leafnodes/measure_node.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/leafnodes/runner.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/leafnodes/setup_nodes.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/leafnodes/suite_nodes.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/leafnodes/synchronized_after_suite_node.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/leafnodes/synchronized_before_suite_node.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/remote/aggregator.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/remote/forwarding_reporter.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor_unix.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor_win.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/remote/server.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/spec/index_computer.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/spec/spec.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/spec/specs.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/specrunner/random_id.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/specrunner/spec_runner.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/suite/suite.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/testingtproxy/testing_t_proxy.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/writer/fake_writer.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/internal/writer/writer.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/reporters/default_reporter.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/reporters/fake_reporter.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/reporters/junit_reporter.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/reporters/reporter.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/reporters/stenographer/console_logging.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/reporters/stenographer/fake_stenographer.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/reporters/stenographer/stenographer.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/reporters/teamcity_reporter.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/types/code_location.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/types/synchronization.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/ginkgo/types/types.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/.gitignore create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/.travis.yml create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/CHANGELOG.md rename vendor/github.com/{ => containernetworking/plugins/vendor/github.com}/onsi/gomega/LICENSE (100%) create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/README.md create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/format/format.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/gbytes/buffer.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/gbytes/say_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/gexec/build.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/gexec/exit_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/gexec/prefixed_writer.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/gexec/session.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/gomega_dsl.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/internal/assertion/assertion.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/internal/asyncassertion/async_assertion.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/internal/oraclematcher/oracle_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/internal/testingtsupport/testing_t_support.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/and.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/be_a_directory.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/be_a_regular_file.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/be_an_existing_file.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/be_closed_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/be_empty_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/be_false_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/be_nil_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/be_sent_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/be_temporally_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/be_true_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/be_zero_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/consist_of.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/contain_element_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/contain_substring_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/equal_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/have_key_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/have_len_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/have_occurred_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/have_prefix_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/have_suffix_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/match_error_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/match_json_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/match_regexp_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/not.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/or.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/panic_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/receive_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/succeed_matcher.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraph.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/support/goraph/edge/edge.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/support/goraph/node/node.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/support/goraph/util/util.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/type_support.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/matchers/with_transform.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/onsi/gomega/types/types.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/vishvananda/netns/LICENSE create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/vishvananda/netns/README.md create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/vishvananda/netns/netns.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/vishvananda/netns/netns_linux.go create mode 100644 vendor/github.com/containernetworking/plugins/vendor/github.com/vishvananda/netns/netns_unspecified.go rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/AUTHORS (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/CONTRIBUTORS (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/LICENSE (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/PATENTS (100%) create mode 100644 vendor/github.com/containernetworking/plugins/vendor/golang.org/x/sys/unix/.gitignore rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_darwin_386.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_darwin_amd64.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_darwin_arm.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_darwin_arm64.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_freebsd_386.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_freebsd_arm.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_linux_386.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_linux_amd64.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_linux_arm.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_linux_arm64.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_linux_s390x.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_netbsd_386.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_netbsd_arm.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_openbsd_386.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/bluetooth_linux.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/constants.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/env_unix.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/env_unset.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/flock.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/flock_linux_32bit.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/gccgo.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/gccgo_c.c (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/mkall.sh (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/mkerrors.sh (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/mkpost.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/mksyscall.pl (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/mksyscall_solaris.pl (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/mksysctl_openbsd.pl (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/mksysnum_darwin.pl (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/mksysnum_dragonfly.pl (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/mksysnum_linux.pl (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/mksysnum_netbsd.pl (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/mksysnum_openbsd.pl (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/race.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/race0.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/sockcmsg_linux.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/sockcmsg_unix.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/str.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_bsd.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_darwin.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_darwin_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_dragonfly.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_freebsd.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_linux.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_linux_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_linux_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_netbsd.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_no_getwd.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_openbsd.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_solaris.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/syscall_unix.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/types_darwin.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/types_dragonfly.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/types_freebsd.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/types_linux.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/types_netbsd.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/types_openbsd.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/types_solaris.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_linux_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysctl_openbsd.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_linux_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go (100%) rename vendor/github.com/containernetworking/{cni => plugins}/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go (100%) create mode 100644 vendor/github.com/coreos/go-iptables/.travis.yml create mode 100644 vendor/github.com/coreos/go-iptables/README.md create mode 100755 vendor/github.com/coreos/go-iptables/build create mode 100644 vendor/github.com/coreos/go-iptables/iptables/iptables_test.go create mode 100755 vendor/github.com/coreos/go-iptables/test delete mode 100644 vendor/github.com/coreos/go-systemd/LICENSE create mode 100644 vendor/github.com/mitchellh/mapstructure/.travis.yml create mode 100644 vendor/github.com/mitchellh/mapstructure/decode_hooks_test.go create mode 100644 vendor/github.com/mitchellh/mapstructure/mapstructure_benchmark_test.go create mode 100644 vendor/github.com/mitchellh/mapstructure/mapstructure_bugs_test.go create mode 100644 vendor/github.com/mitchellh/mapstructure/mapstructure_examples_test.go create mode 100644 vendor/github.com/mitchellh/mapstructure/mapstructure_test.go create mode 100644 vendor/github.com/sirupsen/logrus/.gitignore create mode 100644 vendor/github.com/sirupsen/logrus/.travis.yml create mode 100644 vendor/github.com/sirupsen/logrus/CHANGELOG.md rename vendor/github.com/{yunify/qingcloud-sdk-go/vendor/github.com/Sirupsen => sirupsen}/logrus/LICENSE (100%) create mode 100644 vendor/github.com/sirupsen/logrus/README.md create mode 100644 vendor/github.com/sirupsen/logrus/alt_exit.go create mode 100644 vendor/github.com/sirupsen/logrus/alt_exit_test.go create mode 100644 vendor/github.com/sirupsen/logrus/appveyor.yml rename vendor/github.com/{yunify/qingcloud-sdk-go/vendor/github.com/Sirupsen => sirupsen}/logrus/doc.go (83%) create mode 100644 vendor/github.com/sirupsen/logrus/entry.go create mode 100644 vendor/github.com/sirupsen/logrus/entry_test.go create mode 100644 vendor/github.com/sirupsen/logrus/example_basic_test.go create mode 100644 vendor/github.com/sirupsen/logrus/example_hook_test.go rename vendor/github.com/{yunify/qingcloud-sdk-go/vendor/github.com/Sirupsen => sirupsen}/logrus/exported.go (99%) create mode 100644 vendor/github.com/sirupsen/logrus/formatter.go create mode 100644 vendor/github.com/sirupsen/logrus/formatter_bench_test.go create mode 100644 vendor/github.com/sirupsen/logrus/hook_test.go rename vendor/github.com/{yunify/qingcloud-sdk-go/vendor/github.com/Sirupsen => sirupsen}/logrus/hooks.go (100%) create mode 100644 vendor/github.com/sirupsen/logrus/hooks/syslog/README.md create mode 100644 vendor/github.com/sirupsen/logrus/hooks/syslog/syslog.go create mode 100644 vendor/github.com/sirupsen/logrus/hooks/syslog/syslog_test.go create mode 100644 vendor/github.com/sirupsen/logrus/hooks/test/test.go create mode 100644 vendor/github.com/sirupsen/logrus/hooks/test/test_test.go create mode 100644 vendor/github.com/sirupsen/logrus/json_formatter.go create mode 100644 vendor/github.com/sirupsen/logrus/json_formatter_test.go create mode 100644 vendor/github.com/sirupsen/logrus/logger.go create mode 100644 vendor/github.com/sirupsen/logrus/logger_bench_test.go rename vendor/github.com/{yunify/qingcloud-sdk-go/vendor/github.com/Sirupsen => sirupsen}/logrus/logrus.go (99%) create mode 100644 vendor/github.com/sirupsen/logrus/logrus_test.go create mode 100644 vendor/github.com/sirupsen/logrus/terminal_bsd.go create mode 100644 vendor/github.com/sirupsen/logrus/terminal_linux.go rename vendor/github.com/{yunify/qingcloud-sdk-go/vendor/github.com/Sirupsen => sirupsen}/logrus/text_formatter.go (59%) create mode 100644 vendor/github.com/sirupsen/logrus/text_formatter_test.go create mode 100644 vendor/github.com/sirupsen/logrus/writer.go create mode 100644 vendor/github.com/vishvananda/netlink/.travis.yml create mode 100644 vendor/github.com/vishvananda/netlink/addr_test.go create mode 100644 vendor/github.com/vishvananda/netlink/bridge_linux.go create mode 100644 vendor/github.com/vishvananda/netlink/bridge_linux_test.go create mode 100644 vendor/github.com/vishvananda/netlink/class_test.go create mode 100644 vendor/github.com/vishvananda/netlink/conntrack_test.go create mode 100644 vendor/github.com/vishvananda/netlink/filter_test.go create mode 100644 vendor/github.com/vishvananda/netlink/genetlink_linux.go create mode 100644 vendor/github.com/vishvananda/netlink/genetlink_unspecified.go create mode 100644 vendor/github.com/vishvananda/netlink/gtp_linux.go create mode 100644 vendor/github.com/vishvananda/netlink/gtp_test.go create mode 100644 vendor/github.com/vishvananda/netlink/handle_test.go create mode 100644 vendor/github.com/vishvananda/netlink/link_test.go create mode 100644 vendor/github.com/vishvananda/netlink/neigh_test.go create mode 100644 vendor/github.com/vishvananda/netlink/netlink_test.go create mode 100644 vendor/github.com/vishvananda/netlink/nl/addr_linux_test.go create mode 100644 vendor/github.com/vishvananda/netlink/nl/bridge_linux.go create mode 100644 vendor/github.com/vishvananda/netlink/nl/bridge_linux_test.go create mode 100644 vendor/github.com/vishvananda/netlink/nl/genetlink_linux.go create mode 100644 vendor/github.com/vishvananda/netlink/nl/link_linux_test.go create mode 100644 vendor/github.com/vishvananda/netlink/nl/nl_linux_test.go create mode 100644 vendor/github.com/vishvananda/netlink/nl/route_linux_test.go create mode 100644 vendor/github.com/vishvananda/netlink/nl/tc_linux_test.go create mode 100644 vendor/github.com/vishvananda/netlink/nl/xfrm_linux_test.go create mode 100644 vendor/github.com/vishvananda/netlink/nl/xfrm_monitor_linux_test.go create mode 100644 vendor/github.com/vishvananda/netlink/nl/xfrm_policy_linux_test.go create mode 100644 vendor/github.com/vishvananda/netlink/nl/xfrm_state_linux_test.go create mode 100644 vendor/github.com/vishvananda/netlink/protinfo_test.go create mode 100644 vendor/github.com/vishvananda/netlink/qdisc_test.go create mode 100644 vendor/github.com/vishvananda/netlink/route_test.go create mode 100644 vendor/github.com/vishvananda/netlink/rule_test.go create mode 100644 vendor/github.com/vishvananda/netlink/socket_test.go create mode 100644 vendor/github.com/vishvananda/netlink/xfrm_monitor_test.go create mode 100644 vendor/github.com/vishvananda/netlink/xfrm_policy_test.go create mode 100644 vendor/github.com/vishvananda/netlink/xfrm_state_test.go create mode 100644 vendor/github.com/vishvananda/netns/netns_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/.gitignore create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/.travis.yml create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/config/config_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/glide.yaml create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/request/builder_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/request/signer_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/request/unpacker_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/service/convert_types_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/test/.gitignore rename vendor/github.com/yunify/qingcloud-sdk-go/test/{main.go => main_test.go} (95%) rename vendor/github.com/yunify/qingcloud-sdk-go/test/{service.go => service_test.go} (99%) rename vendor/github.com/yunify/qingcloud-sdk-go/test/{utils.go => utils_test.go} (98%) delete mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/test/vendor/github.com/DATA-DOG/godog/LICENSE delete mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/test/vendor/github.com/DATA-DOG/godog/options.go delete mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/test/vendor/gopkg.in/yaml.v2/LICENSE delete mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/test/vendor/vendor.json create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/utils/json_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/utils/time_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/utils/wait_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/utils/yaml_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/.gitignore create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/.travis.yml rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/CHANGELOG.md (76%) rename vendor/github.com/{ => yunify/qingcloud-sdk-go/vendor/github.com}/DATA-DOG/godog/LICENSE (97%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/Makefile (86%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/README.md (63%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/ast.go (100%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/ast_test.go rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/builder.go (100%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/builder_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/cmd/godog/main.go rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/colors/ansi_others.go (100%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/colors/ansi_windows.go (100%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/colors/colors.go (100%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/colors/no_colors.go (100%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/colors/writer.go (100%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/examples/api/README.md create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/examples/api/api.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/examples/api/api_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/examples/api/screenshots/passed.png create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/examples/api/screenshots/undefined.png create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/examples/api/version.feature create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/examples/db/Makefile create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/examples/db/README.md create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/examples/db/api.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/examples/db/api_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/examples/db/users.feature create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/examples/doc.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/examples/godogs/features/godogs.feature create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/examples/godogs/godogs.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/examples/godogs/godogs_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/features/background.feature create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/features/events.feature create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/features/formatter/cucumber.feature create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/features/formatter/events.feature create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/features/lang.feature create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/features/load.feature create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/features/multistep.feature create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/features/outline.feature create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/features/run.feature create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/features/snippets.feature rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/flags.go (56%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/flags_test.go rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/fmt.go (84%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/fmt_cucumber.go rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/fmt_events.go (92%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/fmt_junit.go (80%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/fmt_junit_test.go rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/fmt_pretty.go (88%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/fmt_progress.go (83%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/fmt_progress_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/fmt_test.go rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/gherkin.go (100%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/gherkin/LICENSE (100%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/gherkin/README.md (100%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/gherkin/ast.go (100%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/gherkin/astbuilder.go (100%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/gherkin/dialect.go (100%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/gherkin/dialects_builtin.go (100%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/gherkin/gherkin.go (100%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/gherkin/matcher.go (100%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/gherkin/parser.go (100%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/godog.go (91%) rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/logo.png (100%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/options.go rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/run.go (55%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/run_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/screenshots/dir-tree.png create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/screenshots/passed.png create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/screenshots/pending.png create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/screenshots/undefined.png create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/stacktrace.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/stacktrace_test.go rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/stepdef.go (89%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/stepdef_test.go rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/suite.go (67%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/suite_context.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/suite_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/tag_filter_test.go rename vendor/github.com/yunify/qingcloud-sdk-go/{test => }/vendor/github.com/DATA-DOG/godog/utils.go (76%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/DATA-DOG/godog/utils_test.go delete mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/Sirupsen/logrus/json_formatter.go delete mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/Sirupsen/logrus/logger.go delete mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/Sirupsen/logrus/terminal_solaris.go delete mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/Sirupsen/logrus/terminal_windows.go delete mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/Sirupsen/logrus/writer.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/davecgh/go-spew/.gitignore create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/davecgh/go-spew/.travis.yml create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/davecgh/go-spew/README.md create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/davecgh/go-spew/cov_report.sh create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/davecgh/go-spew/spew/common_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/davecgh/go-spew/spew/dump_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/davecgh/go-spew/spew/dumpcgo_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/davecgh/go-spew/spew/dumpnocgo_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/davecgh/go-spew/spew/example_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/davecgh/go-spew/spew/format_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/davecgh/go-spew/spew/internal_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/davecgh/go-spew/spew/internalunsafe_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/davecgh/go-spew/spew/spew_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/davecgh/go-spew/spew/testdata/dumpcgo.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/davecgh/go-spew/test_coverage.txt create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/pmezard/go-difflib/.travis.yml create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/pmezard/go-difflib/README.md create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/pmezard/go-difflib/difflib/difflib_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/.gitignore create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/.travis.yml rename vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/{Sirupsen => sirupsen}/logrus/CHANGELOG.md (64%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/LICENSE rename vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/{Sirupsen => sirupsen}/logrus/README.md (61%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/alt_exit.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/alt_exit_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/doc.go rename vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/{Sirupsen => sirupsen}/logrus/entry.go (78%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/entry_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/examples/basic/basic.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/examples/hook/hook.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/exported.go rename vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/{Sirupsen => sirupsen}/logrus/formatter.go (85%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/formatter_bench_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/hook_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/hooks.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/hooks/syslog/README.md create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/hooks/test/test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/hooks/test/test_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/json_formatter.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/json_formatter_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/logger.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/logger_bench_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/logrus.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/logrus_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/terminal_appengine.go rename vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/{Sirupsen => sirupsen}/logrus/terminal_bsd.go (88%) rename vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/{Sirupsen => sirupsen}/logrus/terminal_linux.go (92%) rename vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/{Sirupsen => sirupsen}/logrus/terminal_notwindows.go (57%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/terminal_solaris.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/terminal_windows.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/text_formatter.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/text_formatter_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/sirupsen/logrus/writer.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/.gitignore create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/.travis.yml create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/Godeps/Godeps.json create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/Godeps/Readme rename vendor/github.com/{stretchr/testify/LICENSE => yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/LICENCE.txt} (100%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/README.md create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/_codegen/main.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/assert/assertions_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/assert/forward_assertions_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/assert/http_assertions_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/doc.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/http/doc.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/http/test_response_writer.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/http/test_round_tripper.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/mock/doc.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/mock/mock.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/mock/mock_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/package_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/require/doc.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/require/forward_requirements.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/require/forward_requirements_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/require/require.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/require/require.go.tmpl create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/require/require_forward.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/require/require_forward.go.tmpl create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/require/requirements.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/require/requirements_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/suite/doc.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/suite/interfaces.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/suite/suite.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/suite/suite_test.go rename vendor/github.com/{ => yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com}/davecgh/go-spew/LICENSE (100%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/davecgh/go-spew/spew/bypass.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/davecgh/go-spew/spew/bypasssafe.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/davecgh/go-spew/spew/common.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/davecgh/go-spew/spew/config.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/davecgh/go-spew/spew/doc.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/davecgh/go-spew/spew/dump.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/davecgh/go-spew/spew/format.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/davecgh/go-spew/spew/spew.go rename vendor/github.com/{ => yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com}/pmezard/go-difflib/LICENSE (100%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/pmezard/go-difflib/difflib/difflib.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/.gitignore create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/LICENSE.md create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/README.md create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/accessors.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/codegen/array-access.txt create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/codegen/index.html create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/codegen/template.txt create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/codegen/types_list.txt create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/constants.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/conversions.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/doc.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/map.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/mutations.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/security.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/tests.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/type_specific_codegen.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/github.com/stretchr/testify/vendor/github.com/stretchr/objx/value.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/.gitattributes create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/.gitignore create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/AUTHORS create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/CONTRIBUTING.md create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/CONTRIBUTORS create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/README create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/codereview.cfg rename vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/{unix => plan9}/asm.s (92%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/asm_plan9_386.s create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/const_plan9.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/dir_plan9.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/env_plan9.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/env_unset.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/errors_plan9.go create mode 100755 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/mkall.sh create mode 100755 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/mkerrors.sh create mode 100755 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/mksyscall.pl create mode 100755 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/mksysnum_plan9.sh create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/pwd_plan9.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/race.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/race0.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/str.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/syscall.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/syscall_plan9.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/syscall_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/plan9/zsysnum_plan9.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/.gitignore create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/README.md create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/cap_freebsd.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/creds_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/dirent.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/endian_big.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/endian_little.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/export_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/file_unix.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/linux/Dockerfile create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/linux/mkall.go rename vendor/{golang.org/x/sys/unix/mksysnum_linux.pl => github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/linux/mksysnum.pl} (78%) rename vendor/{golang.org/x/sys/unix/types_linux.go => github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/linux/types.go} (83%) create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/mmap_unix_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/openbsd_pledge.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/openbsd_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/syscall_bsd_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/syscall_linux_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/syscall_solaris_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/syscall_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/syscall_unix_gc.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/syscall_unix_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/asm_windows_386.s create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/asm_windows_amd64.s create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/dll_windows.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/env_unset.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/env_windows.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/eventlog.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/exec_windows.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/memory_windows.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/mksyscall.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/race.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/race0.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/registry/export_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/registry/key.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/registry/mksyscall.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/registry/registry_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/registry/syscall.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/registry/value.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/security_windows.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/service.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/str.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/debug/log.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/debug/service.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/event.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/eventlog/install.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/eventlog/log.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/example/beep.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/example/install.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/example/main.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/example/manage.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/example/service.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/go12.c create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/go12.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/go13.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/mgr/config.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/mgr/mgr.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/mgr/service.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/security.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/service.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/svc_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/sys_386.s create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/svc/sys_amd64.s create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/syscall.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/syscall_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/syscall_windows.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/syscall_windows_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/zsyscall_windows.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/ztypes_windows.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/ztypes_windows_386.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/windows/ztypes_windows_amd64.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/gopkg.in/yaml.v2/.travis.yml create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/gopkg.in/yaml.v2/decode_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/gopkg.in/yaml.v2/encode_test.go create mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/gopkg.in/yaml.v2/suite_test.go delete mode 100644 vendor/github.com/yunify/qingcloud-sdk-go/vendor/vendor.json create mode 100644 vendor/golang.org/x/crypto/.gitattributes create mode 100644 vendor/golang.org/x/crypto/.gitignore create mode 100644 vendor/golang.org/x/crypto/AUTHORS create mode 100644 vendor/golang.org/x/crypto/CONTRIBUTING.md create mode 100644 vendor/golang.org/x/crypto/CONTRIBUTORS create mode 100644 vendor/golang.org/x/crypto/LICENSE create mode 100644 vendor/golang.org/x/crypto/PATENTS create mode 100644 vendor/golang.org/x/crypto/README.md create mode 100644 vendor/golang.org/x/crypto/acme/acme.go create mode 100644 vendor/golang.org/x/crypto/acme/acme_test.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/autocert.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/autocert_test.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/cache.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/cache_test.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/example_test.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/listener.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/renewal.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/renewal_test.go create mode 100644 vendor/golang.org/x/crypto/acme/jws.go create mode 100644 vendor/golang.org/x/crypto/acme/jws_test.go create mode 100644 vendor/golang.org/x/crypto/acme/types.go create mode 100644 vendor/golang.org/x/crypto/acme/types_test.go create mode 100644 vendor/golang.org/x/crypto/bcrypt/base64.go create mode 100644 vendor/golang.org/x/crypto/bcrypt/bcrypt.go create mode 100644 vendor/golang.org/x/crypto/bcrypt/bcrypt_test.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b_amd64.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b_amd64.s create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b_generic.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b_ref.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b_test.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2x.go create mode 100644 vendor/golang.org/x/crypto/blake2b/register.go create mode 100644 vendor/golang.org/x/crypto/blake2s/blake2s.go create mode 100644 vendor/golang.org/x/crypto/blake2s/blake2s_386.go create mode 100644 vendor/golang.org/x/crypto/blake2s/blake2s_386.s create mode 100644 vendor/golang.org/x/crypto/blake2s/blake2s_amd64.go create mode 100644 vendor/golang.org/x/crypto/blake2s/blake2s_amd64.s create mode 100644 vendor/golang.org/x/crypto/blake2s/blake2s_generic.go create mode 100644 vendor/golang.org/x/crypto/blake2s/blake2s_ref.go create mode 100644 vendor/golang.org/x/crypto/blake2s/blake2s_test.go create mode 100644 vendor/golang.org/x/crypto/blake2s/blake2x.go create mode 100644 vendor/golang.org/x/crypto/blake2s/register.go create mode 100644 vendor/golang.org/x/crypto/blowfish/block.go create mode 100644 vendor/golang.org/x/crypto/blowfish/blowfish_test.go create mode 100644 vendor/golang.org/x/crypto/blowfish/cipher.go create mode 100644 vendor/golang.org/x/crypto/blowfish/const.go create mode 100644 vendor/golang.org/x/crypto/bn256/bn256.go create mode 100644 vendor/golang.org/x/crypto/bn256/bn256_test.go create mode 100644 vendor/golang.org/x/crypto/bn256/constants.go create mode 100644 vendor/golang.org/x/crypto/bn256/curve.go create mode 100644 vendor/golang.org/x/crypto/bn256/example_test.go create mode 100644 vendor/golang.org/x/crypto/bn256/gfp12.go create mode 100644 vendor/golang.org/x/crypto/bn256/gfp2.go create mode 100644 vendor/golang.org/x/crypto/bn256/gfp6.go create mode 100644 vendor/golang.org/x/crypto/bn256/optate.go create mode 100644 vendor/golang.org/x/crypto/bn256/twist.go create mode 100644 vendor/golang.org/x/crypto/cast5/cast5.go create mode 100644 vendor/golang.org/x/crypto/cast5/cast5_test.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_generic.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_noasm.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_test.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_vectors_test.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/internal/chacha20/chacha_generic.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/internal/chacha20/chacha_test.go create mode 100644 vendor/golang.org/x/crypto/codereview.cfg create mode 100644 vendor/golang.org/x/crypto/cryptobyte/asn1.go create mode 100644 vendor/golang.org/x/crypto/cryptobyte/asn1_test.go create mode 100644 vendor/golang.org/x/crypto/cryptobyte/builder.go create mode 100644 vendor/golang.org/x/crypto/cryptobyte/cryptobyte_test.go create mode 100644 vendor/golang.org/x/crypto/cryptobyte/example_test.go create mode 100644 vendor/golang.org/x/crypto/cryptobyte/string.go create mode 100644 vendor/golang.org/x/crypto/curve25519/const_amd64.h create mode 100644 vendor/golang.org/x/crypto/curve25519/const_amd64.s create mode 100644 vendor/golang.org/x/crypto/curve25519/cswap_amd64.s create mode 100644 vendor/golang.org/x/crypto/curve25519/curve25519.go create mode 100644 vendor/golang.org/x/crypto/curve25519/curve25519_test.go create mode 100644 vendor/golang.org/x/crypto/curve25519/doc.go create mode 100644 vendor/golang.org/x/crypto/curve25519/freeze_amd64.s create mode 100644 vendor/golang.org/x/crypto/curve25519/ladderstep_amd64.s create mode 100644 vendor/golang.org/x/crypto/curve25519/mont25519_amd64.go create mode 100644 vendor/golang.org/x/crypto/curve25519/mul_amd64.s create mode 100644 vendor/golang.org/x/crypto/curve25519/square_amd64.s create mode 100644 vendor/golang.org/x/crypto/ed25519/ed25519.go create mode 100644 vendor/golang.org/x/crypto/ed25519/ed25519_test.go create mode 100644 vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.go create mode 100644 vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go create mode 100644 vendor/golang.org/x/crypto/ed25519/testdata/sign.input.gz create mode 100644 vendor/golang.org/x/crypto/hkdf/example_test.go create mode 100644 vendor/golang.org/x/crypto/hkdf/hkdf.go create mode 100644 vendor/golang.org/x/crypto/hkdf/hkdf_test.go create mode 100644 vendor/golang.org/x/crypto/md4/example_test.go create mode 100644 vendor/golang.org/x/crypto/md4/md4.go create mode 100644 vendor/golang.org/x/crypto/md4/md4_test.go create mode 100644 vendor/golang.org/x/crypto/md4/md4block.go create mode 100644 vendor/golang.org/x/crypto/nacl/auth/auth.go create mode 100644 vendor/golang.org/x/crypto/nacl/auth/auth_test.go create mode 100644 vendor/golang.org/x/crypto/nacl/auth/example_test.go create mode 100644 vendor/golang.org/x/crypto/nacl/box/box.go create mode 100644 vendor/golang.org/x/crypto/nacl/box/box_test.go create mode 100644 vendor/golang.org/x/crypto/nacl/box/example_test.go create mode 100644 vendor/golang.org/x/crypto/nacl/secretbox/example_test.go create mode 100644 vendor/golang.org/x/crypto/nacl/secretbox/secretbox.go create mode 100644 vendor/golang.org/x/crypto/nacl/secretbox/secretbox_test.go create mode 100644 vendor/golang.org/x/crypto/ocsp/ocsp.go create mode 100644 vendor/golang.org/x/crypto/ocsp/ocsp_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/armor/armor.go create mode 100644 vendor/golang.org/x/crypto/openpgp/armor/armor_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/armor/encode.go create mode 100644 vendor/golang.org/x/crypto/openpgp/canonical_text.go create mode 100644 vendor/golang.org/x/crypto/openpgp/canonical_text_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/clearsign/clearsign.go create mode 100644 vendor/golang.org/x/crypto/openpgp/clearsign/clearsign_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go create mode 100644 vendor/golang.org/x/crypto/openpgp/elgamal/elgamal_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/errors/errors.go create mode 100644 vendor/golang.org/x/crypto/openpgp/keys.go create mode 100644 vendor/golang.org/x/crypto/openpgp/keys_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/compressed.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/compressed_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/config.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/encrypted_key.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/encrypted_key_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/literal.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/ocfb.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/ocfb_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/one_pass_signature.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/opaque.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/opaque_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/packet.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/packet_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/private_key.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/private_key_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/public_key.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/public_key_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/public_key_v3.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/public_key_v3_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/reader.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/signature.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/signature_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/signature_v3.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/signature_v3_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/userattribute.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/userattribute_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/userid.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/userid_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/read.go create mode 100644 vendor/golang.org/x/crypto/openpgp/read_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/s2k/s2k.go create mode 100644 vendor/golang.org/x/crypto/openpgp/s2k/s2k_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/write.go create mode 100644 vendor/golang.org/x/crypto/openpgp/write_test.go create mode 100644 vendor/golang.org/x/crypto/otr/libotr_test_helper.c create mode 100644 vendor/golang.org/x/crypto/otr/otr.go create mode 100644 vendor/golang.org/x/crypto/otr/otr_test.go create mode 100644 vendor/golang.org/x/crypto/otr/smp.go create mode 100644 vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go create mode 100644 vendor/golang.org/x/crypto/pbkdf2/pbkdf2_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/bmp-string.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/bmp-string_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/crypto.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/crypto_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/errors.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/internal/rc2/bench_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/mac.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/mac_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/pbkdf.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/pbkdf_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/pkcs12.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/pkcs12_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/safebags.go create mode 100644 vendor/golang.org/x/crypto/poly1305/poly1305.go create mode 100644 vendor/golang.org/x/crypto/poly1305/poly1305_test.go create mode 100644 vendor/golang.org/x/crypto/poly1305/sum_amd64.go create mode 100644 vendor/golang.org/x/crypto/poly1305/sum_amd64.s create mode 100644 vendor/golang.org/x/crypto/poly1305/sum_arm.go create mode 100644 vendor/golang.org/x/crypto/poly1305/sum_arm.s create mode 100644 vendor/golang.org/x/crypto/poly1305/sum_ref.go create mode 100644 vendor/golang.org/x/crypto/ripemd160/ripemd160.go create mode 100644 vendor/golang.org/x/crypto/ripemd160/ripemd160_test.go create mode 100644 vendor/golang.org/x/crypto/ripemd160/ripemd160block.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa2020_amd64.s create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa208.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa20_ref.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa_test.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa20.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa20_test.go create mode 100644 vendor/golang.org/x/crypto/scrypt/scrypt.go create mode 100644 vendor/golang.org/x/crypto/scrypt/scrypt_test.go create mode 100644 vendor/golang.org/x/crypto/sha3/doc.go create mode 100644 vendor/golang.org/x/crypto/sha3/hashes.go create mode 100644 vendor/golang.org/x/crypto/sha3/keccakf.go create mode 100644 vendor/golang.org/x/crypto/sha3/keccakf_amd64.go create mode 100644 vendor/golang.org/x/crypto/sha3/keccakf_amd64.s create mode 100644 vendor/golang.org/x/crypto/sha3/register.go create mode 100644 vendor/golang.org/x/crypto/sha3/sha3.go create mode 100644 vendor/golang.org/x/crypto/sha3/sha3_test.go create mode 100644 vendor/golang.org/x/crypto/sha3/shake.go create mode 100644 vendor/golang.org/x/crypto/sha3/testdata/keccakKats.json.deflate create mode 100644 vendor/golang.org/x/crypto/sha3/xor.go create mode 100644 vendor/golang.org/x/crypto/sha3/xor_generic.go create mode 100644 vendor/golang.org/x/crypto/sha3/xor_unaligned.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/client.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/client_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/example_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/forward.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/keyring.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/keyring_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/server.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/server_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/testdata_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/benchmark_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/buffer.go create mode 100644 vendor/golang.org/x/crypto/ssh/buffer_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/certs.go create mode 100644 vendor/golang.org/x/crypto/ssh/certs_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/channel.go create mode 100644 vendor/golang.org/x/crypto/ssh/cipher.go create mode 100644 vendor/golang.org/x/crypto/ssh/cipher_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/client.go create mode 100644 vendor/golang.org/x/crypto/ssh/client_auth.go create mode 100644 vendor/golang.org/x/crypto/ssh/client_auth_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/client_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/common.go create mode 100644 vendor/golang.org/x/crypto/ssh/connection.go create mode 100644 vendor/golang.org/x/crypto/ssh/doc.go create mode 100644 vendor/golang.org/x/crypto/ssh/example_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/handshake.go create mode 100644 vendor/golang.org/x/crypto/ssh/handshake_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/kex.go create mode 100644 vendor/golang.org/x/crypto/ssh/kex_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/keys.go create mode 100644 vendor/golang.org/x/crypto/ssh/keys_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/knownhosts/knownhosts.go create mode 100644 vendor/golang.org/x/crypto/ssh/knownhosts/knownhosts_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/mac.go create mode 100644 vendor/golang.org/x/crypto/ssh/mempipe_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/messages.go create mode 100644 vendor/golang.org/x/crypto/ssh/messages_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/mux.go create mode 100644 vendor/golang.org/x/crypto/ssh/mux_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/server.go create mode 100644 vendor/golang.org/x/crypto/ssh/session.go create mode 100644 vendor/golang.org/x/crypto/ssh/session_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/streamlocal.go create mode 100644 vendor/golang.org/x/crypto/ssh/tcpip.go create mode 100644 vendor/golang.org/x/crypto/ssh/tcpip_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/terminal.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/terminal_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_bsd.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_linux.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_windows.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/agent_unix_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/cert_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/dial_unix_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/doc.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/forward_unix_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/session_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/test_unix_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/testdata_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/testdata/doc.go create mode 100644 vendor/golang.org/x/crypto/ssh/testdata/keys.go create mode 100644 vendor/golang.org/x/crypto/ssh/testdata_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/transport.go create mode 100644 vendor/golang.org/x/crypto/ssh/transport_test.go create mode 100644 vendor/golang.org/x/crypto/tea/cipher.go create mode 100644 vendor/golang.org/x/crypto/tea/tea_test.go create mode 100644 vendor/golang.org/x/crypto/twofish/twofish.go create mode 100644 vendor/golang.org/x/crypto/twofish/twofish_test.go create mode 100644 vendor/golang.org/x/crypto/xtea/block.go create mode 100644 vendor/golang.org/x/crypto/xtea/cipher.go create mode 100644 vendor/golang.org/x/crypto/xtea/xtea_test.go create mode 100644 vendor/golang.org/x/crypto/xts/xts.go create mode 100644 vendor/golang.org/x/crypto/xts/xts_test.go create mode 100644 vendor/golang.org/x/sys/.gitattributes create mode 100644 vendor/golang.org/x/sys/.gitignore create mode 100644 vendor/golang.org/x/sys/AUTHORS create mode 100644 vendor/golang.org/x/sys/CONTRIBUTING.md create mode 100644 vendor/golang.org/x/sys/CONTRIBUTORS create mode 100644 vendor/golang.org/x/sys/README create mode 100644 vendor/golang.org/x/sys/codereview.cfg create mode 100644 vendor/golang.org/x/sys/plan9/asm.s create mode 100644 vendor/golang.org/x/sys/plan9/asm_plan9_386.s create mode 100644 vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s create mode 100644 vendor/golang.org/x/sys/plan9/const_plan9.go create mode 100644 vendor/golang.org/x/sys/plan9/dir_plan9.go create mode 100644 vendor/golang.org/x/sys/plan9/env_plan9.go create mode 100644 vendor/golang.org/x/sys/plan9/env_unset.go create mode 100644 vendor/golang.org/x/sys/plan9/errors_plan9.go create mode 100755 vendor/golang.org/x/sys/plan9/mkall.sh create mode 100755 vendor/golang.org/x/sys/plan9/mkerrors.sh create mode 100755 vendor/golang.org/x/sys/plan9/mksyscall.pl create mode 100755 vendor/golang.org/x/sys/plan9/mksysnum_plan9.sh create mode 100644 vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go create mode 100644 vendor/golang.org/x/sys/plan9/pwd_plan9.go create mode 100644 vendor/golang.org/x/sys/plan9/race.go create mode 100644 vendor/golang.org/x/sys/plan9/race0.go create mode 100644 vendor/golang.org/x/sys/plan9/str.go create mode 100644 vendor/golang.org/x/sys/plan9/syscall.go create mode 100644 vendor/golang.org/x/sys/plan9/syscall_plan9.go create mode 100644 vendor/golang.org/x/sys/plan9/syscall_test.go create mode 100644 vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go create mode 100644 vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go create mode 100644 vendor/golang.org/x/sys/plan9/zsysnum_plan9.go create mode 100644 vendor/golang.org/x/sys/unix/.gitignore create mode 100644 vendor/golang.org/x/sys/unix/README.md create mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_arm.s create mode 100644 vendor/golang.org/x/sys/unix/cap_freebsd.go create mode 100644 vendor/golang.org/x/sys/unix/creds_test.go create mode 100644 vendor/golang.org/x/sys/unix/dev_linux.go create mode 100644 vendor/golang.org/x/sys/unix/dev_linux_test.go create mode 100644 vendor/golang.org/x/sys/unix/dirent.go create mode 100644 vendor/golang.org/x/sys/unix/endian_big.go create mode 100644 vendor/golang.org/x/sys/unix/endian_little.go create mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/export_test.go create mode 100644 vendor/golang.org/x/sys/unix/file_unix.go create mode 100644 vendor/golang.org/x/sys/unix/linux/Dockerfile create mode 100644 vendor/golang.org/x/sys/unix/linux/mkall.go rename vendor/{github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/mksysnum_linux.pl => golang.org/x/sys/unix/linux/mksysnum.pl} (51%) rename vendor/{github.com/yunify/qingcloud-sdk-go/vendor/golang.org/x/sys/unix/types_linux.go => golang.org/x/sys/unix/linux/types.go} (79%) create mode 100644 vendor/golang.org/x/sys/unix/mmap_unix_test.go create mode 100644 vendor/golang.org/x/sys/unix/openbsd_test.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_bsd_test.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_test.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_test.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris_test.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_test.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_unix_test.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go create mode 100644 vendor/golang.org/x/sys/windows/asm_windows_386.s create mode 100644 vendor/golang.org/x/sys/windows/asm_windows_amd64.s create mode 100644 vendor/golang.org/x/sys/windows/dll_windows.go create mode 100644 vendor/golang.org/x/sys/windows/env_unset.go create mode 100644 vendor/golang.org/x/sys/windows/env_windows.go create mode 100644 vendor/golang.org/x/sys/windows/eventlog.go create mode 100644 vendor/golang.org/x/sys/windows/exec_windows.go create mode 100644 vendor/golang.org/x/sys/windows/memory_windows.go create mode 100644 vendor/golang.org/x/sys/windows/mksyscall.go create mode 100644 vendor/golang.org/x/sys/windows/race.go create mode 100644 vendor/golang.org/x/sys/windows/race0.go create mode 100644 vendor/golang.org/x/sys/windows/registry/export_test.go create mode 100644 vendor/golang.org/x/sys/windows/registry/key.go create mode 100644 vendor/golang.org/x/sys/windows/registry/mksyscall.go create mode 100644 vendor/golang.org/x/sys/windows/registry/registry_test.go create mode 100644 vendor/golang.org/x/sys/windows/registry/syscall.go create mode 100644 vendor/golang.org/x/sys/windows/registry/value.go create mode 100644 vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go create mode 100644 vendor/golang.org/x/sys/windows/security_windows.go create mode 100644 vendor/golang.org/x/sys/windows/service.go create mode 100644 vendor/golang.org/x/sys/windows/str.go create mode 100644 vendor/golang.org/x/sys/windows/svc/debug/log.go create mode 100644 vendor/golang.org/x/sys/windows/svc/debug/service.go create mode 100644 vendor/golang.org/x/sys/windows/svc/event.go create mode 100644 vendor/golang.org/x/sys/windows/svc/eventlog/install.go create mode 100644 vendor/golang.org/x/sys/windows/svc/eventlog/log.go create mode 100644 vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go create mode 100644 vendor/golang.org/x/sys/windows/svc/example/beep.go create mode 100644 vendor/golang.org/x/sys/windows/svc/example/install.go create mode 100644 vendor/golang.org/x/sys/windows/svc/example/main.go create mode 100644 vendor/golang.org/x/sys/windows/svc/example/manage.go create mode 100644 vendor/golang.org/x/sys/windows/svc/example/service.go create mode 100644 vendor/golang.org/x/sys/windows/svc/go12.c create mode 100644 vendor/golang.org/x/sys/windows/svc/go12.go create mode 100644 vendor/golang.org/x/sys/windows/svc/go13.go create mode 100644 vendor/golang.org/x/sys/windows/svc/mgr/config.go create mode 100644 vendor/golang.org/x/sys/windows/svc/mgr/mgr.go create mode 100644 vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go create mode 100644 vendor/golang.org/x/sys/windows/svc/mgr/service.go create mode 100644 vendor/golang.org/x/sys/windows/svc/security.go create mode 100644 vendor/golang.org/x/sys/windows/svc/service.go create mode 100644 vendor/golang.org/x/sys/windows/svc/svc_test.go create mode 100644 vendor/golang.org/x/sys/windows/svc/sys_386.s create mode 100644 vendor/golang.org/x/sys/windows/svc/sys_amd64.s create mode 100644 vendor/golang.org/x/sys/windows/syscall.go create mode 100644 vendor/golang.org/x/sys/windows/syscall_test.go create mode 100644 vendor/golang.org/x/sys/windows/syscall_windows.go create mode 100644 vendor/golang.org/x/sys/windows/syscall_windows_test.go create mode 100644 vendor/golang.org/x/sys/windows/types_windows.go create mode 100644 vendor/golang.org/x/sys/windows/types_windows_386.go create mode 100644 vendor/golang.org/x/sys/windows/types_windows_amd64.go create mode 100644 vendor/golang.org/x/sys/windows/zsyscall_windows.go create mode 100644 vendor/gopkg.in/yaml.v2/.travis.yml create mode 100644 vendor/gopkg.in/yaml.v2/LICENSE rename vendor/{github.com/yunify/qingcloud-sdk-go/test/vendor => }/gopkg.in/yaml.v2/LICENSE.libyaml (100%) rename vendor/{github.com/yunify/qingcloud-sdk-go/test/vendor => }/gopkg.in/yaml.v2/README.md (97%) rename vendor/{github.com/yunify/qingcloud-sdk-go/test/vendor => }/gopkg.in/yaml.v2/apic.go (100%) rename vendor/{github.com/yunify/qingcloud-sdk-go/test/vendor => }/gopkg.in/yaml.v2/decode.go (98%) create mode 100644 vendor/gopkg.in/yaml.v2/decode_test.go rename vendor/{github.com/yunify/qingcloud-sdk-go/test/vendor => }/gopkg.in/yaml.v2/emitterc.go (99%) rename vendor/{github.com/yunify/qingcloud-sdk-go/test/vendor => }/gopkg.in/yaml.v2/encode.go (100%) create mode 100644 vendor/gopkg.in/yaml.v2/encode_test.go create mode 100644 vendor/gopkg.in/yaml.v2/example_embedded_test.go rename vendor/{github.com/yunify/qingcloud-sdk-go/test/vendor => }/gopkg.in/yaml.v2/parserc.go (99%) rename vendor/{github.com/yunify/qingcloud-sdk-go/test/vendor => }/gopkg.in/yaml.v2/readerc.go (100%) rename vendor/{github.com/yunify/qingcloud-sdk-go/test/vendor => }/gopkg.in/yaml.v2/resolve.go (95%) rename vendor/{github.com/yunify/qingcloud-sdk-go/test/vendor => }/gopkg.in/yaml.v2/scannerc.go (99%) rename vendor/{github.com/yunify/qingcloud-sdk-go/test/vendor => }/gopkg.in/yaml.v2/sorter.go (100%) create mode 100644 vendor/gopkg.in/yaml.v2/suite_test.go rename vendor/{github.com/yunify/qingcloud-sdk-go/test/vendor => }/gopkg.in/yaml.v2/writerc.go (100%) rename vendor/{github.com/yunify/qingcloud-sdk-go/test/vendor => }/gopkg.in/yaml.v2/yaml.go (96%) rename vendor/{github.com/yunify/qingcloud-sdk-go/test/vendor => }/gopkg.in/yaml.v2/yamlh.go (99%) rename vendor/{github.com/yunify/qingcloud-sdk-go/test/vendor => }/gopkg.in/yaml.v2/yamlprivateh.go (100%) diff --git a/.gitignore b/.gitignore index dd714485..500aba87 100644 --- a/.gitignore +++ b/.gitignore @@ -1,69 +1,6 @@ bin -*.DS_Store -.AppleDouble -.LSOverride -Icon -._* -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk -*.exe -*.dll -*.so -*.dylib -*.test -*.out + .glide/ -[._]*.s[a-v][a-z] -[._]*.sw[a-p] -[._]s[a-v][a-z] -[._]sw[a-p] -Session.vim -.netrwhist -*~ -tags .idea/ -*.iws +glide.lock *.iml -/out/ -.idea_modules/ -atlassian-ide-plugin.xml -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties -.metadata -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.settings/ -.loadpath -.recommenders -.project -.externalToolBuilders/ -*.launch -*.pydevproject -.cproject -.classpath -.factorypath -.buildpath -.target -.tern-project -.texlipse -.springBeans -.recommenders/ -.cache-main -.scala_dependencies -.worksheet diff --git a/.travis.yml b/.travis.yml index 3cdcd872..5256bb1f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,10 @@ sudo: false language: go go: -- 1.7 +- 1.8 before_install: install: -- go build -o bin/hostnic ./hostnic/ +- make script: - echo "test skip" before_deploy: diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..da2a1580 --- /dev/null +++ b/Makefile @@ -0,0 +1,68 @@ +# tab space is 4 +# GitHub viewer defaults to 8, change with ?ts=4 in URL + +# Vars describing project +NAME = hostnic-cni +GIT_REPOSITORY = github.com/yunify/hostnic-cni + +# Generate vars to be included from external script +# Allows using bash to generate complex vars, such as project versions +GENERATE_VERSION_INFO_SCRIPT = ./generate_version.sh +GENERATE_VERSION_INFO_OUTPUT = version_info + +# Define newline needed for subsitution to allow evaluating multiline script output +define newline + + +endef + +# Call the version_info script with keyvalue option and evaluate the output +# Will import the keyvalue pairs and make available as Makefile variables +# Use dummy variable to only have execute once +$(eval $(subst #,$(newline),$(shell $(GENERATE_VERSION_INFO_SCRIPT) keyvalue | tr '\n' '#'))) + +# Call the verson_info script with json option and store result into output file and variable +# Will only execute once due to ':=' +#GENERATE_VERSION_INFO := $(shell $(GENERATE_VERSION_INFO_SCRIPT) json | tee $(GENERATE_VERSION_INFO_OUTPUT)) + +# Set defaults for needed vars in case version_info script did not set +# Revision set to number of commits ahead +VERSION ?= 0.0 +COMMITS ?= 0 +REVISION ?= $(COMMITS) +BUILD_LABEL ?= unknown_build +BUILD_DATE ?= $(shell date -u +%Y%m%d.%H%M%S) +GIT_SHA1 ?= unknown_sha1 + +# Vars for export ; generate list of ENV vars based on matching export prefix +# Use strip to get rid of excessive spaces due to the foreach / filter / if logic +EXPORT_VAR_PREFIX = EXPORT_VAR_ +EXPORT_VARS = $(strip $(foreach v,$(filter $(EXPORT_VAR_PREFIX)%,$(.VARIABLES)),$(if $(filter environment%,$(origin $(v))),$(v)))) + +# Vars for go phase +# All vars which being with prefix will be included in ldflags +# Defaulting to full static build +GO_VARIABLE_PREFIX = GO_VAR_ +GO_VAR_BUILD_LABEL := $(BUILD_LABEL) +GO_VAR_VERSION := $(VERSION) +GO_VAR_GIT_SHA1 := $(GIT_SHA1) +GO_VAR_BUILD_LABEL := $(BUILD_LABEL) +GO_LDFLAGS = $(foreach v,$(filter $(GO_VARIABLE_PREFIX)%, $(.VARIABLES)),-X github.com/yunify/hostnic-cni/pkg.$(patsubst $(GO_VARIABLE_PREFIX)%,%,$(v))=$(value $(value v))) +GO_BUILD_FLAGS = -a -tags netgo -installsuffix nocgo -ldflags "$(GO_LDFLAGS)" + +# Define targets + +# default just build binary +default : go-build + +# target for debugging / printing variables +print-% : + @echo '$*=$($*)' + +# perform go build on project +go-build : + go build -o bin/hostnic $(GO_BUILD_FLAGS) $(GIT_REPOSITORY)/cmd/hostnic/ + go build -o bin/nicclearner $(GO_BUILD_FLAGS) $(GIT_REPOSITORY)/cmd/niccleaner/ + + +.PHONY : default all go-build \ No newline at end of file diff --git a/hostnic/hostnic.go b/cmd/hostnic/hostnic.go similarity index 96% rename from hostnic/hostnic.go rename to cmd/hostnic/hostnic.go index 3e070663..2e13c461 100644 --- a/hostnic/hostnic.go +++ b/cmd/hostnic/hostnic.go @@ -28,7 +28,8 @@ import ( "net" - "github.com/containernetworking/cni/pkg/ns" + "github.com/containernetworking/plugins/pkg/ns" + "github.com/containernetworking/plugins/pkg/ipam" "github.com/containernetworking/cni/pkg/skel" "github.com/containernetworking/cni/pkg/types" "github.com/containernetworking/cni/pkg/types/current" @@ -37,7 +38,7 @@ import ( "github.com/yunify/hostnic-cni/pkg" "github.com/yunify/hostnic-cni/provider" _ "github.com/yunify/hostnic-cni/provider/qingcloud" - "github.com/yunify/qingcloud-sdk-go/logger" + logger "github.com/sirupsen/logrus" ) const processLockFile = pkg.DefaultDataDir + "/lock" @@ -133,7 +134,8 @@ func cmdAdd(args *skel.CmdArgs) error { } gateWay := net.ParseIP(nic.VxNet.GateWay) netIF := ¤t.Interface{Name: args.IfName, Mac: nic.HardwareAddr, Sandbox: args.ContainerID} - ipConfig := ¤t.IPConfig{Address: net.IPNet{IP: net.ParseIP(nic.Address), Mask: ipNet.Mask}, Interface: 0, Version: "4", Gateway: gateWay} + numOfiface :=0 + ipConfig := ¤t.IPConfig{Address: net.IPNet{IP: net.ParseIP(nic.Address), Mask: ipNet.Mask}, Interface: &numOfiface, Version: "4", Gateway: gateWay} //TODO support ipv6 route := &types.Route{Dst: net.IPNet{IP: net.IPv4zero, Mask: net.IPMask(net.IPv4zero)}, GW: gateWay} var routeTable = []*types.Route{route} @@ -149,7 +151,7 @@ func cmdAdd(args *skel.CmdArgs) error { if err := netlink.LinkSetName(nsIface, args.IfName); err != nil { return fmt.Errorf("set link %s to name %s err: %v", nsIface.Attrs().HardwareAddr.String(), srcName, args.IfName) } - return pkg.ConfigureIface(args.IfName, result) + return ipam.ConfigureIface(args.IfName, result) }) if err != nil { deleteNic(nic.ID, nicProvider) diff --git a/tools/niccleaner/main.go b/cmd/niccleaner/main.go similarity index 100% rename from tools/niccleaner/main.go rename to cmd/niccleaner/main.go diff --git a/generate_version.sh b/generate_version.sh new file mode 100755 index 00000000..813ddd21 --- /dev/null +++ b/generate_version.sh @@ -0,0 +1,140 @@ +#!/bin/bash +# Define the project string to be used +PROJECT=hostnic-cni + +# Use `git describe` to get parts for version information and state +GIT_DESCRIBE=$(git describe --long --dirty --tags) +if [[ $? != 0 ]]; then + echo "No tags!" + exit +fi + +# Parse the output of `git describe` +# VERSION: The latest `git tag` +# COMMITS: The number of commits ahead workspace is of `git tag` +# SHA1: Unique SHA1 reference of current commit state +# DIRTY: Whether this workspace contains uncommitted / local changes +IFS='-' read -a myarray <<< "$GIT_DESCRIBE" + +VERSION=${myarray[0]} +COMMITS=${myarray[1]} +SHA1=${myarray[2]} + +if [ -z ${myarray[3]} ]; then + DIRTY=false +else + DIRTY=true +fi + +if [[ $(git ls-files --directory --exclude-standard --others -t) ]]; then + DIRTY=true +fi + +# Which branch was the git workspace tracking +BRANCH=$(git rev-parse --abbrev-ref HEAD) + +# Generate a well known label based on branch +# Unknown branches will go by their SHA1 +case $BRANCH in + master) + LABEL="ga" + ;; + develop) + LABEL="dev" + ;; + release/*) + LABEL="rc" + ;; + *) + LABEL=$SHA1 +esac + +# Generate a label to represent this build +# Combination of various information about the git workspace +# Can be used for a filename of the package +BUILD_LABEL="${PROJECT}-${VERSION}-${COMMITS}-${LABEL}" + +if [ "$DIRTY" = true ]; then + BUILD_LABEL=${BUILD_LABEL}-dirty +fi + +# Generate a build date if was not passed into the env or present in parent env +BUILD_DATE=${BUILD_DATE:=$(date -u +%Y%m%d.%H%M%S)} + +# Set the variables to be outputted +# All vars that begin with the prefix will be outputted +# Allows callers of the script to inject new vars through ENV +# e.g. Jenkins can set EXPORT_JENKINS_SERVER=build-server +VAR_PREFIX=EXPORT_VAR_ + +EXPORT_VAR_GIT_DESCRIBE="$GIT_DESCRIBE" +EXPORT_VAR_BRANCH="$BRANCH" +EXPORT_VAR_LABEL="$LABEL" +EXPORT_VAR_VERSION="$VERSION" +EXPORT_VAR_COMMITS="$COMMITS" +EXPORT_VAR_GIT_SHA1="$SHA1" +EXPORT_VAR_DIRTY="$DIRTY" +EXPORT_VAR_BUILD_LABEL="$BUILD_LABEL" +EXPORT_VAR_BUILD_DATE="$BUILD_DATE" + + +# Get a list of all ENV vars and internal defined vars that begin with prefix +VAR_LIST=$(eval "set -o posix ; set | grep '^$VAR_PREFIX'") + +# Generate a JSON document for version_info containing the vars +# Using HERE documents to allow pretty printing +JSON=$(cat <= len(res.Interfaces) || res.Interfaces[ipc.Interface].Name != ifName { + if int(*ipc.Interface) >= len(res.Interfaces) || res.Interfaces[*ipc.Interface].Name != ifName { // IP address is for a different interface return fmt.Errorf("failed to add IP addr %v to %q: invalid interface index", ipc, ifName) } diff --git a/pkg/version.go b/pkg/version.go new file mode 100644 index 00000000..d2069642 --- /dev/null +++ b/pkg/version.go @@ -0,0 +1,6 @@ +package pkg +var ( + VERSION string = "dev" + GIT_SHA1 string = "dev+git" + BUILD_LABEL string = "please use make to generate build files" +) diff --git a/release b/release index 20526f6c..22773af8 100755 --- a/release +++ b/release @@ -20,5 +20,5 @@ echo "Build hostnic" mkdir -p bin/ -env GOOS=linux GOARCH=amd64 go build -o bin/hostnic ./hostnic/ +make tar -C bin/ -czf bin/hostnic.tar.gz hostnic diff --git a/vendor/github.com/containernetworking/cni/.gitignore b/vendor/github.com/containernetworking/cni/.gitignore new file mode 100644 index 00000000..0d94fb80 --- /dev/null +++ b/vendor/github.com/containernetworking/cni/.gitignore @@ -0,0 +1,5 @@ +bin/ +gopath/ +*.sw[ponm] +.vagrant +release-* diff --git a/vendor/github.com/containernetworking/cni/.travis.yml b/vendor/github.com/containernetworking/cni/.travis.yml new file mode 100644 index 00000000..234f8826 --- /dev/null +++ b/vendor/github.com/containernetworking/cni/.travis.yml @@ -0,0 +1,41 @@ +language: go +sudo: required +dist: trusty + +go: + - 1.7.x + - 1.8.x + +env: + global: + - TOOLS_CMD=golang.org/x/tools/cmd + - PATH=$GOROOT/bin:$PATH + - GO15VENDOREXPERIMENT=1 + matrix: + - TARGET=amd64 + - TARGET=arm + - TARGET=arm64 + - TARGET=ppc64le + - TARGET=s390x + +matrix: + fast_finish: true + +install: + - go get ${TOOLS_CMD}/cover + - go get github.com/modocache/gover + - go get github.com/mattn/goveralls + +script: + - > + if [ "${TARGET}" == "amd64" ]; then + GOARCH="${TARGET}" ./test.sh; + else + GOARCH="${TARGET}" ./build.sh; + fi + +notifications: + email: false + +git: + depth: 9999999 diff --git a/vendor/github.com/containernetworking/cni/CODE-OF-CONDUCT.md b/vendor/github.com/containernetworking/cni/CODE-OF-CONDUCT.md new file mode 100644 index 00000000..b6e32163 --- /dev/null +++ b/vendor/github.com/containernetworking/cni/CODE-OF-CONDUCT.md @@ -0,0 +1,4 @@ +## Community Code of Conduct + +CNI follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). + diff --git a/vendor/github.com/containernetworking/cni/CONVENTIONS.md b/vendor/github.com/containernetworking/cni/CONVENTIONS.md index 3d515098..76a87625 100644 --- a/vendor/github.com/containernetworking/cni/CONVENTIONS.md +++ b/vendor/github.com/containernetworking/cni/CONVENTIONS.md @@ -58,7 +58,7 @@ But the runtime would fill in the mappings so the plugin itself would receive so ``` ## "args" in network config -`args` in [network config](https://github.com/containernetworking/cni/blob/master/SPEC.md#network-configuration) were introduced as an optional field into the `0.1.0` CNI spec. The first CNI code release that it appeared in was `v0.4.0`. +`args` in [network config](https://github.com/containernetworking/cni/blob/master/SPEC.md#network-configuration) were introduced as an optional field into the `0.2.0` release of the CNI spec. The first CNI code release that it appeared in was `v0.4.0`. > args (dictionary): Optional additional arguments provided by the container runtime. For example a dictionary of labels could be passed to CNI plugins by adding them to a labels field under args. `args` provide a way of providing more structured data than the flat strings that CNI_ARGS can support. @@ -99,4 +99,10 @@ The use of `CNI_ARGS` is deprecated and "args" should be used instead. | Field | Purpose| Spec and Example | Runtime implementations | Plugin Implementations | | ------ | ------ | ---------------- | ----------------------- | ---------------------- | | IP | Request a specific IP from IPAM plugins | IP=192.168.10.4 | *rkt* supports passing additional arguments to plugins and the [documentation](https://coreos.com/rkt/docs/latest/networking/overriding-defaults.html) suggests IP can be used. | host-local (since version v0.2.0) supports the field for IPv4 only - [documentation](https://github.com/containernetworking/cni/blob/master/Documentation/host-local.md#supported-arguments).| - + +## Chained Plugins +If plugins are agnostic about the type of interface created, they SHOULD work in a chained mode and configure existing interfaces. Plugins MAY also create the desired interface when not run in a chain. + +For example, the `bridge` plugin adds the host-side interface to a bridge. So, it should accept any previous result that includes a host-side interface, including `tap` devices. If not called as a chained plugin, it creates a `veth` pair first. + +Plugins that meet this convention are usable by a larger set of runtimes and interfaces, including hypervisors and DPDK providers. diff --git a/vendor/github.com/containernetworking/cni/Documentation/host-local.md b/vendor/github.com/containernetworking/cni/Documentation/host-local.md deleted file mode 100644 index 073e369a..00000000 --- a/vendor/github.com/containernetworking/cni/Documentation/host-local.md +++ /dev/null @@ -1,82 +0,0 @@ -# host-local IP address management plugin - -host-local IPAM allocates IPv4 and IPv6 addresses out of a specified address range. Optionally, -it can include a DNS configuration from a `resolv.conf` file on the host. - -## Overview - -host-local IPAM plugin allocates IPv4 addresses out of a specified address range. -It stores the state locally on the host filesystem, therefore ensuring uniqueness of IP addresses on a single host. - -## Example configurations - -IPv4: -```json -{ - "ipam": { - "type": "host-local", - "subnet": "10.10.0.0/16", - "rangeStart": "10.10.1.20", - "rangeEnd": "10.10.3.50", - "gateway": "10.10.0.254", - "routes": [ - { "dst": "0.0.0.0/0" }, - { "dst": "192.168.0.0/16", "gw": "10.10.5.1" } - ], - "dataDir": "/var/my-orchestrator/container-ipam-state" - } -} -``` - -IPv6: -```json -{ - "ipam": { - "type": "host-local", - "subnet": "3ffe:ffff:0:01ff::/64", - "rangeStart": "3ffe:ffff:0:01ff::0010", - "rangeEnd": "3ffe:ffff:0:01ff::0020", - "routes": [ - { "dst": "3ffe:ffff:0:01ff::1/64" } - ], - "resolvConf": "/etc/resolv.conf" - } -} -``` - -We can test it out on the command-line: - -```bash -$ export CNI_COMMAND=ADD -$ export CNI_CONTAINERID=f81d4fae-7dec-11d0-a765-00a0c91e6bf6 -$ echo '{ "name": "default", "ipam": { "type": "host-local", "subnet": "203.0.113.0/24" } }' | ./host-local -``` - -```json -{ - "ip4": { - "ip": "203.0.113.1/24" - } -} -``` - -## Network configuration reference - -* `type` (string, required): "host-local". -* `subnet` (string, required): CIDR block to allocate out of. -* `rangeStart` (string, optional): IP inside of "subnet" from which to start allocating addresses. Defaults to ".2" IP inside of the "subnet" block. -* `rangeEnd` (string, optional): IP inside of "subnet" with which to end allocating addresses. Defaults to ".254" IP inside of the "subnet" block. -* `gateway` (string, optional): IP inside of "subnet" to designate as the gateway. Defaults to ".1" IP inside of the "subnet" block. -* `routes` (string, optional): list of routes to add to the container namespace. Each route is a dictionary with "dst" and optional "gw" fields. If "gw" is omitted, value of "gateway" will be used. -* `resolvConf` (string, optional): Path to a `resolv.conf` on the host to parse and return as the DNS configuration -* `dataDir` (string, optional): Path to a directory to use for maintaining state, e.g. which IPs have been allocated to which containers - - -## Supported arguments -The following [CNI_ARGS](https://github.com/containernetworking/cni/blob/master/SPEC.md#parameters) are supported: - -* `ip`: request a specific IP address from the subnet. If it's not available, the plugin will exit with an error - -## Files - -Allocated IP addresses are stored as files in `/var/lib/cni/networks/$NETWORK_NAME`. The prefix can be customized with the `dataDir` option listed above. diff --git a/vendor/github.com/containernetworking/cni/Godeps/Godeps.json b/vendor/github.com/containernetworking/cni/Godeps/Godeps.json index a59db899..876f9b65 100644 --- a/vendor/github.com/containernetworking/cni/Godeps/Godeps.json +++ b/vendor/github.com/containernetworking/cni/Godeps/Godeps.json @@ -1,29 +1,11 @@ { "ImportPath": "github.com/containernetworking/cni", - "GoVersion": "go1.6", + "GoVersion": "go1.8", "GodepVersion": "v79", "Packages": [ "./..." ], "Deps": [ - { - "ImportPath": "github.com/coreos/go-iptables/iptables", - "Comment": "v0.1.0", - "Rev": "fbb73372b87f6e89951c2b6b31470c2c9d5cfae3" - }, - { - "ImportPath": "github.com/coreos/go-systemd/activation", - "Comment": "v2-53-g2688e91", - "Rev": "2688e91251d9d8e404e86dd8f096e23b2f086958" - }, - { - "ImportPath": "github.com/d2g/dhcp4", - "Rev": "f0e4d29ff0231dce36e250b2ed9ff08412584bca" - }, - { - "ImportPath": "github.com/d2g/dhcp4client", - "Rev": "bed07e1bc5b85f69c6f0fd73393aa35ec68ed892" - }, { "ImportPath": "github.com/onsi/ginkgo", "Comment": "v1.2.0-29-g7f8ab55", @@ -173,22 +155,6 @@ "ImportPath": "github.com/onsi/gomega/types", "Comment": "v1.0-71-g2152b45", "Rev": "2152b45fa28a361beba9aab0885972323a444e28" - }, - { - "ImportPath": "github.com/vishvananda/netlink", - "Rev": "b71e0bb214aebd980216cb2516e8bd7bca9e9672" - }, - { - "ImportPath": "github.com/vishvananda/netlink/nl", - "Rev": "b71e0bb214aebd980216cb2516e8bd7bca9e9672" - }, - { - "ImportPath": "github.com/vishvananda/netns", - "Rev": "8ba1072b58e0c2a240eb5f6120165c7776c3e7b8" - }, - { - "ImportPath": "golang.org/x/sys/unix", - "Rev": "076b546753157f758b316e59bcb51e6807c04057" } ] } diff --git a/vendor/github.com/containernetworking/cni/README.md b/vendor/github.com/containernetworking/cni/README.md index 55896c07..793187c7 100644 --- a/vendor/github.com/containernetworking/cni/README.md +++ b/vendor/github.com/containernetworking/cni/README.md @@ -2,11 +2,13 @@ [![Coverage Status](https://coveralls.io/repos/github/containernetworking/cni/badge.svg?branch=master)](https://coveralls.io/github/containernetworking/cni?branch=master) [![Slack Status](https://cryptic-tundra-43194.herokuapp.com/badge.svg)](https://cryptic-tundra-43194.herokuapp.com/) +![CNI Logo](logo.png) + --- # Community Sync Meeting -There is a community sync meeting for users and developers every 1-2 months. The next meeting will help on a Google Hangout and the link is in the [agenda](https://docs.google.com/document/d/10ECyT2mBGewsJUcmYmS8QNo1AcNgy2ZIe2xS7lShYhE/edit?usp=sharing) (Notes from previous meeting are also in this doc). The next meeting will be held on *April 12th* at *3:00pm UTC* [Add to Calendar](https://www.worldtimebuddy.com/?qm=1&lid=100,5,2643743,5391959&h=100&date=2017-4-12&sln=15-16). +There is a community sync meeting for users and developers every 1-2 months. The next meeting will help on a Google Hangout and the link is in the [agenda](https://docs.google.com/document/d/10ECyT2mBGewsJUcmYmS8QNo1AcNgy2ZIe2xS7lShYhE/edit?usp=sharing) (Notes from previous meeting are also in this doc). The next meeting will be held on *Wednesday, June 21th* at *3:00pm UTC* [Add to Calendar]https://www.worldtimebuddy.com/?qm=1&lid=100,5,2643743,5391959&h=100&date=2017-6-21&sln=15-16). --- @@ -14,11 +16,11 @@ There is a community sync meeting for users and developers every 1-2 months. The ## What is CNI? -The CNI (_Container Network Interface_) project consists of a specification and libraries for writing plugins to configure network interfaces in Linux containers, along with a number of supported plugins. +CNI (_Container Network Interface_), a [Cloud Native Computing Foundation](https://cncf.io) project, consists of a specification and libraries for writing plugins to configure network interfaces in Linux containers, along with a number of supported plugins. CNI concerns itself only with network connectivity of containers and removing allocated resources when the container is deleted. Because of this focus, CNI has a wide range of support and the specification is simple to implement. -As well as the [specification](SPEC.md), this repository contains the Go source code of a library for integrating CNI into applications, an example command-line tool, a template for making new plugins, and the supported plugins. +As well as the [specification](SPEC.md), this repository contains the Go source code of a [library for integrating CNI into applications](libcni) and an [example command-line tool](cnitool) for executing CNI plugins. A [separate repository contains reference plugins](https://github.com/containernetworking/plugins) and a template for making new plugins. The template code makes it straight-forward to create a CNI plugin for an existing container networking project. CNI also makes a good framework for creating a new container networking project from scratch. @@ -35,7 +37,8 @@ To avoid duplication, we think it is prudent to define a common interface betwee - [rkt - container engine](https://coreos.com/blog/rkt-cni-networking.html) - [Kurma - container runtime](http://kurma.io/) - [Kubernetes - a system to simplify container operations](http://kubernetes.io/docs/admin/network-plugins/) -- [Cloud Foundry - a platform for cloud applications](https://github.com/cloudfoundry-incubator/netman-release) +- [OpenShift - Kubernetes with additional enterprise features](https://github.com/openshift/origin/blob/master/docs/openshift_networking_requirements.md) +- [Cloud Foundry - a platform for cloud applications](https://github.com/cloudfoundry-incubator/cf-networking-release) - [Mesos - a distributed systems kernel](https://github.com/apache/mesos/blob/master/docs/cni.md) ### 3rd party plugins @@ -48,8 +51,11 @@ To avoid duplication, we think it is prudent to define a common interface betwee - [Multus - a Multi plugin](https://github.com/Intel-Corp/multus-cni) - [Romana - Layer 3 CNI plugin supporting network policy for Kubernetes](https://github.com/romana/kube) - [CNI-Genie - generic CNI network plugin](https://github.com/Huawei-PaaS/CNI-Genie) +- [Nuage CNI - Nuage Networks SDN plugin for network policy kubernetes support ](https://github.com/nuagenetworks/nuage-cni) +- [Silk - a CNI plugin designed for Cloud Foundry](https://github.com/cloudfoundry-incubator/silk) +- [Linen - a CNI plugin designed for overlay networks with Open vSwitch and fit in SDN/OpenFlow network environment](https://github.com/John-Lin/linen-cni) -The CNI team also maintains some [core plugins](plugins). +The CNI team also maintains some [core plugins in a separate repository](https://github.com/containernetworking/plugins). ## Contributing to CNI @@ -61,19 +67,16 @@ If you intend to contribute to code or documentation, please read [CONTRIBUTING. ### Requirements -CNI requires Go 1.5+ to build. - -Go 1.5 users will need to set GO15VENDOREXPERIMENT=1 to get vendored -dependencies. This flag is set by default in 1.6. +The CNI spec is language agnostic. To use the Go language libraries in this repository, you'll need a recent version of Go. Our [automated tests](https://travis-ci.org/containernetworking/cni/builds) cover Go versions 1.7 and 1.8. -### Included Plugins +### Reference Plugins -This repository includes a number of common plugins in the `plugins/` directory. -Please see the [Documentation/](Documentation/) directory for documentation about particular plugins. +The CNI project maintains a set of [reference plugins](https://github.com/containernetworking/plugins) that implement the CNI specification. +NOTE: the reference plugins used to live in this repository but have been split out into a [separate repository](https://github.com/containernetworking/plugins) as of May 2017. ### Running the plugins -The scripts/ directory contains two scripts, `priv-net-run.sh` and `docker-run.sh`, that can be used to exercise the plugins. +After building and installing the [reference plugins](https://github.com/containernetworking/plugins), you can use the `priv-net-run.sh` and `docker-run.sh` scripts in the `scripts/` directory to exercise the plugins. **note - priv-net-run.sh depends on `jq`** @@ -111,14 +114,15 @@ The directory `/etc/cni/net.d` is the default location in which the scripts will Next, build the plugins: ```bash +$ cd $GOPATH/src/github.com/containernetworking/plugins $ ./build.sh ``` Finally, execute a command (`ifconfig` in this example) in a private network namespace that has joined the `mynet` network: ```bash -$ CNI_PATH=`pwd`/bin -$ cd scripts +$ CNI_PATH=$GOPATH/src/github.com/containernetworking/plugins/bin +$ cd $GOPATH/src/github.com/containernetworking/cni/scripts $ sudo CNI_PATH=$CNI_PATH ./priv-net-run.sh ifconfig eth0 Link encap:Ethernet HWaddr f2:c2:6f:54:b8:2b inet addr:10.22.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 @@ -126,7 +130,7 @@ eth0 Link encap:Ethernet HWaddr f2:c2:6f:54:b8:2b UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:1 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:1 overruns:0 carrier:0 - collisions:0 txqueuelen:0 + collisions:0 txqueuelen:0 RX bytes:90 (90.0 B) TX bytes:0 (0.0 B) lo Link encap:Local Loopback @@ -135,7 +139,7 @@ lo Link encap:Local Loopback UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 - collisions:0 txqueuelen:0 + collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) ``` @@ -147,8 +151,8 @@ Use the instructions in the previous section to define a netconf and build the p Next, docker-run.sh script wraps `docker run`, to execute the plugins prior to entering the container: ```bash -$ CNI_PATH=`pwd`/bin -$ cd scripts +$ CNI_PATH=$GOPATH/src/github.com/containernetworking/plugins/bin +$ cd $GOPATH/src/github.com/containernetworking/cni/scripts $ sudo CNI_PATH=$CNI_PATH ./docker-run.sh --rm busybox:latest ifconfig eth0 Link encap:Ethernet HWaddr fa:60:70:aa:07:d1 inet addr:10.22.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 @@ -156,7 +160,7 @@ eth0 Link encap:Ethernet HWaddr fa:60:70:aa:07:d1 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:1 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:1 overruns:0 carrier:0 - collisions:0 txqueuelen:0 + collisions:0 txqueuelen:0 RX bytes:90 (90.0 B) TX bytes:0 (0.0 B) lo Link encap:Local Loopback @@ -165,7 +169,7 @@ lo Link encap:Local Loopback UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 - collisions:0 txqueuelen:0 + collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) ``` diff --git a/vendor/github.com/containernetworking/cni/RELEASING.md b/vendor/github.com/containernetworking/cni/RELEASING.md new file mode 100644 index 00000000..dd1b7a94 --- /dev/null +++ b/vendor/github.com/containernetworking/cni/RELEASING.md @@ -0,0 +1,34 @@ +# Release process + +## Resulting artifacts +Creating a new release produces the following artifacts: + +- Binaries (stored in the `release-` directory) : + - `cni--.tgz` binaries + - `cni-.tgz` binary (copy of amd64 platform binary) + - `sha1`, `sha256` and `sha512` files for the above files. + +## Preparing for a release +1. Releases are performed by maintainers and should usually be discussed and planned at a maintainer meeting. + - Choose the version number. It should be prefixed with `v`, e.g. `v1.2.3` + - Take a quick scan through the PRs and issues to make sure there isn't anything crucial that _must_ be in the next release. + - Create a draft of the release note + - Discuss the level of testing that's needed and create a test plan if sensible + - Check what version of `go` is used in the build container, updating it if there's a new stable release. + +## Creating the release artifacts +1. Make sure you are on the master branch and don't have any local uncommitted changes. +1. Create a signed tag for the release `git tag -s $VERSION` (Ensure that GPG keys are created and added to GitHub) +1. Run the release script from the root of the repository + - `scripts/release.sh` + - The script requires Docker and ensures that a consistent environment is used. + - The artifacts will now be present in the `release-` directory. +1. Test these binaries according to the test plan. + +## Publishing the release +1. Push the tag to git `git push origin ` +1. Create a release on Github, using the tag which was just pushed. +1. Attach all the artifacts from the release directory. +1. Add the release note to the release. +1. Announce the release on at least the CNI mailing, IRC and Slack. + diff --git a/vendor/github.com/containernetworking/cni/Vagrantfile b/vendor/github.com/containernetworking/cni/Vagrantfile index 93b2866a..0a257151 100644 --- a/vendor/github.com/containernetworking/cni/Vagrantfile +++ b/vendor/github.com/containernetworking/cni/Vagrantfile @@ -10,11 +10,17 @@ Vagrant.configure(2) do |config| set -e -x -u apt-get update -y || (sleep 40 && apt-get update -y) - apt-get install -y golang git - echo "export GOPATH=/go" >> /root/.bashrc - export GOPATH=/go + apt-get install -y git + + wget -qO- https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz | tar -C /usr/local -xz + + echo 'export GOPATH=/go; export PATH=/usr/local/go/bin:$GOPATH/bin:$PATH' >> /root/.bashrc + eval `tail -n1 /root/.bashrc` + go get github.com/tools/godep + cd /go/src/github.com/containernetworking/cni - /go/bin/godep restore + godep restore + SHELL end diff --git a/vendor/github.com/containernetworking/cni/build.sh b/vendor/github.com/containernetworking/cni/build.sh index d0e2885b..b7e41d17 100755 --- a/vendor/github.com/containernetworking/cni/build.sh +++ b/vendor/github.com/containernetworking/cni/build.sh @@ -19,7 +19,7 @@ echo "Building reference CLI" go build -o ${PWD}/bin/cnitool "$@" ${REPO_PATH}/cnitool echo "Building plugins" -PLUGINS="plugins/meta/* plugins/main/* plugins/ipam/* plugins/test/*" +PLUGINS="plugins/test/*" for d in $PLUGINS; do if [ -d $d ]; then plugin=$(basename $d) diff --git a/vendor/github.com/containernetworking/cni/cnitool/cni.go b/vendor/github.com/containernetworking/cni/cnitool/cni.go index 92f91016..7252b8cf 100644 --- a/vendor/github.com/containernetworking/cni/cnitool/cni.go +++ b/vendor/github.com/containernetworking/cni/cnitool/cni.go @@ -19,6 +19,7 @@ import ( "fmt" "os" "path/filepath" + "strings" "github.com/containernetworking/cni/libcni" ) @@ -27,6 +28,7 @@ const ( EnvCNIPath = "CNI_PATH" EnvNetDir = "NETCONFPATH" EnvCapabilityArgs = "CAP_ARGS" + EnvCNIArgs = "CNI_ARGS" DefaultNetDir = "/etc/cni/net.d" @@ -34,6 +36,22 @@ const ( CmdDel = "del" ) +func parseArgs(args string) ([][2]string, error) { + var result [][2]string + + pairs := strings.Split(args, ";") + for _, pair := range pairs { + kv := strings.Split(pair, "=") + if len(kv) != 2 || kv[0] == "" || kv[1] == "" { + return nil, fmt.Errorf("invalid CNI_ARGS pair %q", pair) + } + + result = append(result, [2]string{kv[0], kv[1]}) + } + + return result, nil +} + func main() { if len(os.Args) < 3 { usage() @@ -50,9 +68,18 @@ func main() { } var capabilityArgs map[string]interface{} - args := os.Getenv(EnvCapabilityArgs) + capabilityArgsValue := os.Getenv(EnvCapabilityArgs) + if len(capabilityArgsValue) > 0 { + if err = json.Unmarshal([]byte(capabilityArgsValue), &capabilityArgs); err != nil { + exit(err) + } + } + + var cniArgs [][2]string + args := os.Getenv(EnvCNIArgs) if len(args) > 0 { - if err = json.Unmarshal([]byte(args), &capabilityArgs); err != nil { + cniArgs, err = parseArgs(args) + if err != nil { exit(err) } } @@ -67,6 +94,7 @@ func main() { ContainerID: "cni", NetNS: netns, IfName: "eth0", + Args: cniArgs, CapabilityArgs: capabilityArgs, } diff --git a/vendor/github.com/containernetworking/cni/libcni/api_test.go b/vendor/github.com/containernetworking/cni/libcni/api_test.go new file mode 100644 index 00000000..0616bf4e --- /dev/null +++ b/vendor/github.com/containernetworking/cni/libcni/api_test.go @@ -0,0 +1,577 @@ +// Copyright 2016 CNI authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package libcni_test + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net" + "os" + "path/filepath" + + "github.com/containernetworking/cni/libcni" + "github.com/containernetworking/cni/pkg/skel" + "github.com/containernetworking/cni/pkg/types" + "github.com/containernetworking/cni/pkg/types/current" + noop_debug "github.com/containernetworking/cni/plugins/test/noop/debug" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +type pluginInfo struct { + debugFilePath string + debug *noop_debug.Debug + config string + stdinData []byte +} + +type portMapping struct { + HostPort int `json:"hostPort"` + ContainerPort int `json:"containerPort"` + Protocol string `json:"protocol"` +} + +func stringInList(s string, list []string) bool { + for _, item := range list { + if s == item { + return true + } + } + return false +} + +func newPluginInfo(configValue, prevResult string, injectDebugFilePath bool, result string, runtimeConfig map[string]interface{}, capabilities []string) pluginInfo { + debugFile, err := ioutil.TempFile("", "cni_debug") + Expect(err).NotTo(HaveOccurred()) + Expect(debugFile.Close()).To(Succeed()) + debugFilePath := debugFile.Name() + + debug := &noop_debug.Debug{ + ReportResult: result, + } + Expect(debug.WriteDebug(debugFilePath)).To(Succeed()) + + // config is what would be in the plugin's on-disk configuration + // without runtime injected keys + config := fmt.Sprintf(`{"type": "noop", "some-key": "%s"`, configValue) + if prevResult != "" { + config += fmt.Sprintf(`, "prevResult": %s`, prevResult) + } + if injectDebugFilePath { + config += fmt.Sprintf(`, "debugFile": "%s"`, debugFilePath) + } + if len(capabilities) > 0 { + config += `, "capabilities": {` + for i, c := range capabilities { + if i > 0 { + config += ", " + } + config += fmt.Sprintf(`"%s": true`, c) + } + config += "}" + } + config += "}" + + // stdinData is what the runtime should pass to the plugin's stdin, + // including injected keys like 'name', 'cniVersion', and 'runtimeConfig' + newConfig := make(map[string]interface{}) + err = json.Unmarshal([]byte(config), &newConfig) + Expect(err).NotTo(HaveOccurred()) + newConfig["name"] = "some-list" + newConfig["cniVersion"] = "0.3.1" + + // Only include standard runtime config and capability args that this plugin advertises + newRuntimeConfig := make(map[string]interface{}) + for key, value := range runtimeConfig { + if stringInList(key, capabilities) { + newRuntimeConfig[key] = value + } + } + if len(newRuntimeConfig) > 0 { + newConfig["runtimeConfig"] = newRuntimeConfig + } + + stdinData, err := json.Marshal(newConfig) + Expect(err).NotTo(HaveOccurred()) + + return pluginInfo{ + debugFilePath: debugFilePath, + debug: debug, + config: config, + stdinData: stdinData, + } +} + +var _ = Describe("Invoking plugins", func() { + Describe("Capabilities", func() { + var ( + debugFilePath string + debug *noop_debug.Debug + pluginConfig []byte + cniConfig libcni.CNIConfig + runtimeConfig *libcni.RuntimeConf + netConfig *libcni.NetworkConfig + ) + + BeforeEach(func() { + debugFile, err := ioutil.TempFile("", "cni_debug") + Expect(err).NotTo(HaveOccurred()) + Expect(debugFile.Close()).To(Succeed()) + debugFilePath = debugFile.Name() + + debug = &noop_debug.Debug{} + Expect(debug.WriteDebug(debugFilePath)).To(Succeed()) + + pluginConfig = []byte(`{ "type": "noop", "cniVersion": "0.3.1", "capabilities": { "portMappings": true, "somethingElse": true, "noCapability": false } }`) + netConfig, err = libcni.ConfFromBytes(pluginConfig) + Expect(err).NotTo(HaveOccurred()) + + cniConfig = libcni.CNIConfig{Path: []string{filepath.Dir(pluginPaths["noop"])}} + + runtimeConfig = &libcni.RuntimeConf{ + ContainerID: "some-container-id", + NetNS: "/some/netns/path", + IfName: "some-eth0", + Args: [][2]string{{"DEBUG", debugFilePath}}, + CapabilityArgs: map[string]interface{}{ + "portMappings": []portMapping{ + {HostPort: 8080, ContainerPort: 80, Protocol: "tcp"}, + }, + "somethingElse": []string{"foobar", "baz"}, + "noCapability": true, + "notAdded": []bool{true, false}, + }, + } + }) + + AfterEach(func() { + Expect(os.RemoveAll(debugFilePath)).To(Succeed()) + }) + + It("adds correct runtime config for capabilities to stdin", func() { + _, err := cniConfig.AddNetwork(netConfig, runtimeConfig) + Expect(err).NotTo(HaveOccurred()) + + debug, err = noop_debug.ReadDebug(debugFilePath) + Expect(err).NotTo(HaveOccurred()) + Expect(debug.Command).To(Equal("ADD")) + + conf := make(map[string]interface{}) + err = json.Unmarshal(debug.CmdArgs.StdinData, &conf) + Expect(err).NotTo(HaveOccurred()) + + // We expect runtimeConfig keys only for portMappings and somethingElse + rawRc := conf["runtimeConfig"] + rc, ok := rawRc.(map[string]interface{}) + Expect(ok).To(Equal(true)) + expectedKeys := []string{"portMappings", "somethingElse"} + Expect(len(rc)).To(Equal(len(expectedKeys))) + for _, key := range expectedKeys { + _, ok := rc[key] + Expect(ok).To(Equal(true)) + } + }) + + It("adds no runtimeConfig when the plugin advertises no used capabilities", func() { + // Replace CapabilityArgs with ones we know the plugin + // doesn't support + runtimeConfig.CapabilityArgs = map[string]interface{}{ + "portMappings22": []portMapping{ + {HostPort: 8080, ContainerPort: 80, Protocol: "tcp"}, + }, + "somethingElse22": []string{"foobar", "baz"}, + } + + _, err := cniConfig.AddNetwork(netConfig, runtimeConfig) + Expect(err).NotTo(HaveOccurred()) + + debug, err = noop_debug.ReadDebug(debugFilePath) + Expect(err).NotTo(HaveOccurred()) + Expect(debug.Command).To(Equal("ADD")) + + conf := make(map[string]interface{}) + err = json.Unmarshal(debug.CmdArgs.StdinData, &conf) + Expect(err).NotTo(HaveOccurred()) + + // No intersection of plugin capabilities and CapabilityArgs, + // so plugin should not receive a "runtimeConfig" key + _, ok := conf["runtimeConfig"] + Expect(ok).Should(BeFalse()) + }) + }) + + Describe("Invoking a single plugin", func() { + var ( + debugFilePath string + debug *noop_debug.Debug + cniBinPath string + pluginConfig string + cniConfig libcni.CNIConfig + netConfig *libcni.NetworkConfig + runtimeConfig *libcni.RuntimeConf + + expectedCmdArgs skel.CmdArgs + ) + + BeforeEach(func() { + debugFile, err := ioutil.TempFile("", "cni_debug") + Expect(err).NotTo(HaveOccurred()) + Expect(debugFile.Close()).To(Succeed()) + debugFilePath = debugFile.Name() + + debug = &noop_debug.Debug{ + ReportResult: `{ "ips": [{ "version": "4", "address": "10.1.2.3/24" }], "dns": {} }`, + } + Expect(debug.WriteDebug(debugFilePath)).To(Succeed()) + + portMappings := []portMapping{ + {HostPort: 8080, ContainerPort: 80, Protocol: "tcp"}, + } + + cniBinPath = filepath.Dir(pluginPaths["noop"]) + pluginConfig = `{ "type": "noop", "some-key": "some-value", "cniVersion": "0.3.1", "capabilities": { "portMappings": true } }` + cniConfig = libcni.CNIConfig{Path: []string{cniBinPath}} + netConfig = &libcni.NetworkConfig{ + Network: &types.NetConf{ + Type: "noop", + Capabilities: map[string]bool{ + "portMappings": true, + }, + }, + Bytes: []byte(pluginConfig), + } + runtimeConfig = &libcni.RuntimeConf{ + ContainerID: "some-container-id", + NetNS: "/some/netns/path", + IfName: "some-eth0", + Args: [][2]string{{"DEBUG", debugFilePath}}, + CapabilityArgs: map[string]interface{}{ + "portMappings": portMappings, + }, + } + + // inject runtime args into the expected plugin config + conf := make(map[string]interface{}) + err = json.Unmarshal([]byte(pluginConfig), &conf) + Expect(err).NotTo(HaveOccurred()) + conf["runtimeConfig"] = map[string]interface{}{ + "portMappings": portMappings, + } + newBytes, err := json.Marshal(conf) + Expect(err).NotTo(HaveOccurred()) + + expectedCmdArgs = skel.CmdArgs{ + ContainerID: "some-container-id", + Netns: "/some/netns/path", + IfName: "some-eth0", + Args: "DEBUG=" + debugFilePath, + Path: cniBinPath, + StdinData: newBytes, + } + }) + + AfterEach(func() { + Expect(os.RemoveAll(debugFilePath)).To(Succeed()) + }) + + Describe("AddNetwork", func() { + It("executes the plugin with command ADD", func() { + r, err := cniConfig.AddNetwork(netConfig, runtimeConfig) + Expect(err).NotTo(HaveOccurred()) + + result, err := current.GetResult(r) + Expect(err).NotTo(HaveOccurred()) + + Expect(result).To(Equal(¤t.Result{ + CNIVersion: current.ImplementedSpecVersion, + IPs: []*current.IPConfig{ + { + Version: "4", + Address: net.IPNet{ + IP: net.ParseIP("10.1.2.3"), + Mask: net.IPv4Mask(255, 255, 255, 0), + }, + }, + }, + })) + + debug, err := noop_debug.ReadDebug(debugFilePath) + Expect(err).NotTo(HaveOccurred()) + Expect(debug.Command).To(Equal("ADD")) + Expect(debug.CmdArgs).To(Equal(expectedCmdArgs)) + Expect(string(debug.CmdArgs.StdinData)).To(ContainSubstring("\"portMappings\":")) + }) + + Context("when finding the plugin fails", func() { + BeforeEach(func() { + netConfig.Network.Type = "does-not-exist" + }) + + It("returns the error", func() { + _, err := cniConfig.AddNetwork(netConfig, runtimeConfig) + Expect(err).To(MatchError(ContainSubstring(`failed to find plugin "does-not-exist"`))) + }) + }) + + Context("when the plugin errors", func() { + BeforeEach(func() { + debug.ReportError = "plugin error: banana" + Expect(debug.WriteDebug(debugFilePath)).To(Succeed()) + }) + It("unmarshals and returns the error", func() { + result, err := cniConfig.AddNetwork(netConfig, runtimeConfig) + Expect(result).To(BeNil()) + Expect(err).To(MatchError("plugin error: banana")) + }) + }) + }) + + Describe("DelNetwork", func() { + It("executes the plugin with command DEL", func() { + err := cniConfig.DelNetwork(netConfig, runtimeConfig) + Expect(err).NotTo(HaveOccurred()) + + debug, err := noop_debug.ReadDebug(debugFilePath) + Expect(err).NotTo(HaveOccurred()) + Expect(debug.Command).To(Equal("DEL")) + Expect(debug.CmdArgs).To(Equal(expectedCmdArgs)) + Expect(string(debug.CmdArgs.StdinData)).To(ContainSubstring("\"portMappings\":")) + }) + + Context("when finding the plugin fails", func() { + BeforeEach(func() { + netConfig.Network.Type = "does-not-exist" + }) + + It("returns the error", func() { + err := cniConfig.DelNetwork(netConfig, runtimeConfig) + Expect(err).To(MatchError(ContainSubstring(`failed to find plugin "does-not-exist"`))) + }) + }) + + Context("when the plugin errors", func() { + BeforeEach(func() { + debug.ReportError = "plugin error: banana" + Expect(debug.WriteDebug(debugFilePath)).To(Succeed()) + }) + It("unmarshals and returns the error", func() { + err := cniConfig.DelNetwork(netConfig, runtimeConfig) + Expect(err).To(MatchError("plugin error: banana")) + }) + }) + }) + + Describe("GetVersionInfo", func() { + It("executes the plugin with the command VERSION", func() { + versionInfo, err := cniConfig.GetVersionInfo("noop") + Expect(err).NotTo(HaveOccurred()) + + Expect(versionInfo).NotTo(BeNil()) + Expect(versionInfo.SupportedVersions()).To(Equal([]string{ + "0.-42.0", "0.1.0", "0.2.0", "0.3.0", "0.3.1", + })) + }) + + Context("when finding the plugin fails", func() { + It("returns the error", func() { + _, err := cniConfig.GetVersionInfo("does-not-exist") + Expect(err).To(MatchError(ContainSubstring(`failed to find plugin "does-not-exist"`))) + }) + }) + }) + }) + + Describe("Invoking a plugin list", func() { + var ( + plugins []pluginInfo + cniBinPath string + cniConfig libcni.CNIConfig + netConfigList *libcni.NetworkConfigList + runtimeConfig *libcni.RuntimeConf + + expectedCmdArgs skel.CmdArgs + ) + + BeforeEach(func() { + var err error + + capabilityArgs := map[string]interface{}{ + "portMappings": []portMapping{ + {HostPort: 8080, ContainerPort: 80, Protocol: "tcp"}, + }, + "otherCapability": 33, + } + + cniBinPath = filepath.Dir(pluginPaths["noop"]) + cniConfig = libcni.CNIConfig{Path: []string{cniBinPath}} + runtimeConfig = &libcni.RuntimeConf{ + ContainerID: "some-container-id", + NetNS: "/some/netns/path", + IfName: "some-eth0", + Args: [][2]string{{"FOO", "BAR"}}, + CapabilityArgs: capabilityArgs, + } + + expectedCmdArgs = skel.CmdArgs{ + ContainerID: runtimeConfig.ContainerID, + Netns: runtimeConfig.NetNS, + IfName: runtimeConfig.IfName, + Args: "FOO=BAR", + Path: cniBinPath, + } + + rc := map[string]interface{}{ + "containerId": runtimeConfig.ContainerID, + "netNs": runtimeConfig.NetNS, + "ifName": runtimeConfig.IfName, + "args": map[string]string{ + "FOO": "BAR", + }, + "portMappings": capabilityArgs["portMappings"], + "otherCapability": capabilityArgs["otherCapability"], + } + + ipResult := `{"dns":{},"ips":[{"version": "4", "address": "10.1.2.3/24"}]}` + plugins = make([]pluginInfo, 3, 3) + plugins[0] = newPluginInfo("some-value", "", true, ipResult, rc, []string{"portMappings", "otherCapability"}) + plugins[1] = newPluginInfo("some-other-value", ipResult, true, "PASSTHROUGH", rc, []string{"otherCapability"}) + plugins[2] = newPluginInfo("yet-another-value", ipResult, true, "INJECT-DNS", rc, []string{}) + + configList := []byte(fmt.Sprintf(`{ + "name": "some-list", + "cniVersion": "0.3.1", + "plugins": [ + %s, + %s, + %s + ] +}`, plugins[0].config, plugins[1].config, plugins[2].config)) + + netConfigList, err = libcni.ConfListFromBytes(configList) + Expect(err).NotTo(HaveOccurred()) + }) + + AfterEach(func() { + for _, p := range plugins { + Expect(os.RemoveAll(p.debugFilePath)).To(Succeed()) + } + }) + + Describe("AddNetworkList", func() { + It("executes all plugins with command ADD and returns an intermediate result", func() { + r, err := cniConfig.AddNetworkList(netConfigList, runtimeConfig) + Expect(err).NotTo(HaveOccurred()) + + result, err := current.GetResult(r) + Expect(err).NotTo(HaveOccurred()) + + Expect(result).To(Equal(¤t.Result{ + CNIVersion: current.ImplementedSpecVersion, + // IP4 added by first plugin + IPs: []*current.IPConfig{ + { + Version: "4", + Address: net.IPNet{ + IP: net.ParseIP("10.1.2.3"), + Mask: net.IPv4Mask(255, 255, 255, 0), + }, + }, + }, + // DNS injected by last plugin + DNS: types.DNS{ + Nameservers: []string{"1.2.3.4"}, + }, + })) + + for i := 0; i < len(plugins); i++ { + debug, err := noop_debug.ReadDebug(plugins[i].debugFilePath) + Expect(err).NotTo(HaveOccurred()) + Expect(debug.Command).To(Equal("ADD")) + + // Must explicitly match JSON due to dict element ordering + Expect(debug.CmdArgs.StdinData).To(MatchJSON(plugins[i].stdinData)) + debug.CmdArgs.StdinData = nil + Expect(debug.CmdArgs).To(Equal(expectedCmdArgs)) + } + }) + + Context("when finding the plugin fails", func() { + BeforeEach(func() { + netConfigList.Plugins[1].Network.Type = "does-not-exist" + }) + + It("returns the error", func() { + _, err := cniConfig.AddNetworkList(netConfigList, runtimeConfig) + Expect(err).To(MatchError(ContainSubstring(`failed to find plugin "does-not-exist"`))) + }) + }) + + Context("when the second plugin errors", func() { + BeforeEach(func() { + plugins[1].debug.ReportError = "plugin error: banana" + Expect(plugins[1].debug.WriteDebug(plugins[1].debugFilePath)).To(Succeed()) + }) + It("unmarshals and returns the error", func() { + result, err := cniConfig.AddNetworkList(netConfigList, runtimeConfig) + Expect(result).To(BeNil()) + Expect(err).To(MatchError("plugin error: banana")) + }) + }) + }) + + Describe("DelNetworkList", func() { + It("executes all the plugins in reverse order with command DEL", func() { + err := cniConfig.DelNetworkList(netConfigList, runtimeConfig) + Expect(err).NotTo(HaveOccurred()) + + for i := 0; i < len(plugins); i++ { + debug, err := noop_debug.ReadDebug(plugins[i].debugFilePath) + Expect(err).NotTo(HaveOccurred()) + Expect(debug.Command).To(Equal("DEL")) + + // Must explicitly match JSON due to dict element ordering + Expect(debug.CmdArgs.StdinData).To(MatchJSON(plugins[i].stdinData)) + debug.CmdArgs.StdinData = nil + Expect(debug.CmdArgs).To(Equal(expectedCmdArgs)) + } + }) + + Context("when finding the plugin fails", func() { + BeforeEach(func() { + netConfigList.Plugins[1].Network.Type = "does-not-exist" + }) + + It("returns the error", func() { + err := cniConfig.DelNetworkList(netConfigList, runtimeConfig) + Expect(err).To(MatchError(ContainSubstring(`failed to find plugin "does-not-exist"`))) + }) + }) + + Context("when the plugin errors", func() { + BeforeEach(func() { + plugins[1].debug.ReportError = "plugin error: banana" + Expect(plugins[1].debug.WriteDebug(plugins[1].debugFilePath)).To(Succeed()) + }) + It("unmarshals and returns the error", func() { + err := cniConfig.DelNetworkList(netConfigList, runtimeConfig) + Expect(err).To(MatchError("plugin error: banana")) + }) + }) + }) + + }) +}) diff --git a/vendor/github.com/containernetworking/cni/libcni/backwards_compatibility_test.go b/vendor/github.com/containernetworking/cni/libcni/backwards_compatibility_test.go new file mode 100644 index 00000000..a1fcce56 --- /dev/null +++ b/vendor/github.com/containernetworking/cni/libcni/backwards_compatibility_test.go @@ -0,0 +1,79 @@ +// Copyright 2016 CNI authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package libcni_test + +import ( + "fmt" + "os" + "os/exec" + "path/filepath" + "strings" + + "github.com/containernetworking/cni/libcni" + "github.com/containernetworking/cni/pkg/version/legacy_examples" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + "github.com/onsi/gomega/gexec" +) + +var _ = Describe("Backwards compatibility", func() { + It("correctly handles the response from a legacy plugin", func() { + example := legacy_examples.V010 + pluginPath, err := example.Build() + Expect(err).NotTo(HaveOccurred()) + + netConf, err := libcni.ConfFromBytes([]byte(fmt.Sprintf( + `{ "name": "old-thing", "type": "%s" }`, example.Name))) + Expect(err).NotTo(HaveOccurred()) + + runtimeConf := &libcni.RuntimeConf{ + ContainerID: "some-container-id", + NetNS: "/some/netns/path", + IfName: "eth0", + } + + cniConfig := &libcni.CNIConfig{Path: []string{filepath.Dir(pluginPath)}} + + result, err := cniConfig.AddNetwork(netConf, runtimeConf) + Expect(err).NotTo(HaveOccurred()) + + Expect(result).To(Equal(legacy_examples.ExpectedResult)) + + Expect(os.RemoveAll(pluginPath)).To(Succeed()) + }) + + It("correctly handles the request from a runtime with an older libcni", func() { + example := legacy_examples.V010_Runtime + + binPath, err := example.Build() + Expect(err).NotTo(HaveOccurred()) + + for _, configName := range example.NetConfs { + conf, err := example.GenerateNetConf(configName) + if err != nil { + Fail("Failed to generate config name " + configName + ": " + err.Error()) + } + defer conf.Cleanup() + + cmd := exec.Command(binPath, pluginDirs...) + cmd.Stdin = strings.NewReader(conf.Config) + + session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter) + Expect(err).NotTo(HaveOccurred()) + + Eventually(session).Should(gexec.Exit(0)) + } + }) +}) diff --git a/vendor/github.com/containernetworking/cni/libcni/conf_test.go b/vendor/github.com/containernetworking/cni/libcni/conf_test.go new file mode 100644 index 00000000..225828e4 --- /dev/null +++ b/vendor/github.com/containernetworking/cni/libcni/conf_test.go @@ -0,0 +1,431 @@ +// Copyright 2016 CNI authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package libcni_test + +import ( + "io/ioutil" + "os" + "path/filepath" + + "github.com/containernetworking/cni/libcni" + "github.com/containernetworking/cni/pkg/types" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Loading configuration from disk", func() { + Describe("LoadConf", func() { + var ( + configDir string + pluginConfig []byte + ) + + BeforeEach(func() { + var err error + configDir, err = ioutil.TempDir("", "plugin-conf") + Expect(err).NotTo(HaveOccurred()) + + pluginConfig = []byte(`{ "name": "some-plugin", "some-key": "some-value" }`) + Expect(ioutil.WriteFile(filepath.Join(configDir, "50-whatever.conf"), pluginConfig, 0600)).To(Succeed()) + }) + + AfterEach(func() { + Expect(os.RemoveAll(configDir)).To(Succeed()) + }) + + It("finds the network config file for the plugin of the given type", func() { + netConfig, err := libcni.LoadConf(configDir, "some-plugin") + Expect(err).NotTo(HaveOccurred()) + Expect(netConfig).To(Equal(&libcni.NetworkConfig{ + Network: &types.NetConf{Name: "some-plugin"}, + Bytes: pluginConfig, + })) + }) + + Context("when the config directory does not exist", func() { + BeforeEach(func() { + Expect(os.RemoveAll(configDir)).To(Succeed()) + }) + + It("returns a useful error", func() { + _, err := libcni.LoadConf(configDir, "some-plugin") + Expect(err).To(MatchError(libcni.NoConfigsFoundError{Dir: configDir})) + }) + }) + + Context("when the config file is .json extension instead of .conf", func() { + BeforeEach(func() { + Expect(os.Remove(configDir + "/50-whatever.conf")).To(Succeed()) + pluginConfig = []byte(`{ "name": "some-plugin", "some-key": "some-value" }`) + Expect(ioutil.WriteFile(filepath.Join(configDir, "50-whatever.json"), pluginConfig, 0600)).To(Succeed()) + }) + It("finds the network config file for the plugin of the given type", func() { + netConfig, err := libcni.LoadConf(configDir, "some-plugin") + Expect(err).NotTo(HaveOccurred()) + Expect(netConfig).To(Equal(&libcni.NetworkConfig{ + Network: &types.NetConf{Name: "some-plugin"}, + Bytes: pluginConfig, + })) + }) + }) + + Context("when there is no config for the desired plugin", func() { + It("returns a useful error", func() { + _, err := libcni.LoadConf(configDir, "some-other-plugin") + Expect(err).To(MatchError(ContainSubstring(`no net configuration with name "some-other-plugin" in`))) + }) + }) + + Context("when a config file is malformed", func() { + BeforeEach(func() { + Expect(ioutil.WriteFile(filepath.Join(configDir, "00-bad.conf"), []byte(`{`), 0600)).To(Succeed()) + }) + + It("returns a useful error", func() { + _, err := libcni.LoadConf(configDir, "some-plugin") + Expect(err).To(MatchError(`error parsing configuration: unexpected end of JSON input`)) + }) + }) + + Context("when the config is in a nested subdir", func() { + BeforeEach(func() { + subdir := filepath.Join(configDir, "subdir1", "subdir2") + Expect(os.MkdirAll(subdir, 0700)).To(Succeed()) + + pluginConfig = []byte(`{ "name": "deep", "some-key": "some-value" }`) + Expect(ioutil.WriteFile(filepath.Join(subdir, "90-deep.conf"), pluginConfig, 0600)).To(Succeed()) + }) + + It("will not find the config", func() { + _, err := libcni.LoadConf(configDir, "deep") + Expect(err).To(MatchError(HavePrefix("no net configuration with name"))) + }) + }) + }) + + Describe("Capabilities", func() { + var configDir string + + BeforeEach(func() { + var err error + configDir, err = ioutil.TempDir("", "plugin-conf") + Expect(err).NotTo(HaveOccurred()) + + pluginConfig := []byte(`{ "name": "some-plugin", "type": "noop", "cniVersion": "0.3.1", "capabilities": { "portMappings": true, "somethingElse": true, "noCapability": false } }`) + Expect(ioutil.WriteFile(filepath.Join(configDir, "50-whatever.conf"), pluginConfig, 0600)).To(Succeed()) + }) + + AfterEach(func() { + Expect(os.RemoveAll(configDir)).To(Succeed()) + }) + + It("reads plugin capabilities from network config", func() { + netConfig, err := libcni.LoadConf(configDir, "some-plugin") + Expect(err).NotTo(HaveOccurred()) + Expect(netConfig.Network.Capabilities).To(Equal(map[string]bool{ + "portMappings": true, + "somethingElse": true, + "noCapability": false, + })) + }) + }) + + Describe("ConfFromFile", func() { + Context("when the file cannot be opened", func() { + It("returns a useful error", func() { + _, err := libcni.ConfFromFile("/tmp/nope/not-here") + Expect(err).To(MatchError(HavePrefix(`error reading /tmp/nope/not-here: open /tmp/nope/not-here`))) + }) + }) + }) + + Describe("LoadConfList", func() { + var ( + configDir string + configList []byte + ) + + BeforeEach(func() { + var err error + configDir, err = ioutil.TempDir("", "plugin-conf") + Expect(err).NotTo(HaveOccurred()) + + configList = []byte(`{ + "name": "some-list", + "cniVersion": "0.2.0", + "plugins": [ + { + "type": "host-local", + "subnet": "10.0.0.1/24" + }, + { + "type": "bridge", + "mtu": 1400 + }, + { + "type": "port-forwarding", + "ports": {"20.0.0.1:8080": "80"} + } + ] +}`) + Expect(ioutil.WriteFile(filepath.Join(configDir, "50-whatever.conflist"), configList, 0600)).To(Succeed()) + }) + + AfterEach(func() { + Expect(os.RemoveAll(configDir)).To(Succeed()) + }) + + It("finds the network config file for the plugin of the given type", func() { + netConfigList, err := libcni.LoadConfList(configDir, "some-list") + Expect(err).NotTo(HaveOccurred()) + Expect(netConfigList).To(Equal(&libcni.NetworkConfigList{ + Name: "some-list", + CNIVersion: "0.2.0", + Plugins: []*libcni.NetworkConfig{ + { + Network: &types.NetConf{Type: "host-local"}, + Bytes: []byte(`{"subnet":"10.0.0.1/24","type":"host-local"}`), + }, + { + Network: &types.NetConf{Type: "bridge"}, + Bytes: []byte(`{"mtu":1400,"type":"bridge"}`), + }, + { + Network: &types.NetConf{Type: "port-forwarding"}, + Bytes: []byte(`{"ports":{"20.0.0.1:8080":"80"},"type":"port-forwarding"}`), + }, + }, + Bytes: configList, + })) + }) + + Context("when there is a config file with the same name as the list", func() { + BeforeEach(func() { + configFile := []byte(`{ + "name": "some-list", + "cniVersion": "0.2.0", + "type": "bridge" + }`) + Expect(ioutil.WriteFile(filepath.Join(configDir, "49-whatever.conf"), configFile, 0600)).To(Succeed()) + }) + + It("Loads the config list first", func() { + netConfigList, err := libcni.LoadConfList(configDir, "some-list") + Expect(err).NotTo(HaveOccurred()) + Expect(len(netConfigList.Plugins)).To(Equal(3)) + }) + + It("falls back to the config file", func() { + Expect(os.Remove(filepath.Join(configDir, "50-whatever.conflist"))).To(Succeed()) + + netConfigList, err := libcni.LoadConfList(configDir, "some-list") + Expect(err).NotTo(HaveOccurred()) + Expect(len(netConfigList.Plugins)).To(Equal(1)) + Expect(netConfigList.Plugins[0].Network.Type).To(Equal("bridge")) + }) + }) + + Context("when the config directory does not exist", func() { + BeforeEach(func() { + Expect(os.RemoveAll(configDir)).To(Succeed()) + }) + + It("returns a useful error", func() { + _, err := libcni.LoadConfList(configDir, "some-plugin") + Expect(err).To(MatchError(libcni.NoConfigsFoundError{Dir: configDir})) + }) + }) + + Context("when there is no config for the desired plugin list", func() { + It("returns a useful error", func() { + _, err := libcni.LoadConfList(configDir, "some-other-plugin") + Expect(err).To(MatchError(libcni.NotFoundError{configDir, "some-other-plugin"})) + }) + }) + + Context("when a config file is malformed", func() { + BeforeEach(func() { + Expect(ioutil.WriteFile(filepath.Join(configDir, "00-bad.conflist"), []byte(`{`), 0600)).To(Succeed()) + }) + + It("returns a useful error", func() { + _, err := libcni.LoadConfList(configDir, "some-plugin") + Expect(err).To(MatchError(`error parsing configuration list: unexpected end of JSON input`)) + }) + }) + + Context("when the config is in a nested subdir", func() { + BeforeEach(func() { + subdir := filepath.Join(configDir, "subdir1", "subdir2") + Expect(os.MkdirAll(subdir, 0700)).To(Succeed()) + + configList = []byte(`{ + "name": "deep", + "cniVersion": "0.2.0", + "plugins": [ + { + "type": "host-local", + "subnet": "10.0.0.1/24" + }, + ] +}`) + Expect(ioutil.WriteFile(filepath.Join(subdir, "90-deep.conflist"), configList, 0600)).To(Succeed()) + }) + + It("will not find the config", func() { + _, err := libcni.LoadConfList(configDir, "deep") + Expect(err).To(MatchError(HavePrefix("no net configuration with name"))) + }) + }) + }) + + Describe("ConfListFromFile", func() { + Context("when the file cannot be opened", func() { + It("returns a useful error", func() { + _, err := libcni.ConfListFromFile("/tmp/nope/not-here") + Expect(err).To(MatchError(HavePrefix(`error reading /tmp/nope/not-here: open /tmp/nope/not-here`))) + }) + }) + }) + + Describe("InjectConf", func() { + var testNetConfig *libcni.NetworkConfig + + BeforeEach(func() { + testNetConfig = &libcni.NetworkConfig{Network: &types.NetConf{Name: "some-plugin"}, + Bytes: []byte(`{ "name": "some-plugin" }`)} + }) + + Context("when function parameters are incorrect", func() { + It("returns unmarshal error", func() { + conf := &libcni.NetworkConfig{Network: &types.NetConf{Name: "some-plugin"}, + Bytes: []byte(`{ cc cc cc}`)} + + _, err := libcni.InjectConf(conf, map[string]interface{}{"": nil}) + Expect(err).To(MatchError(HavePrefix(`unmarshal existing network bytes`))) + }) + + It("returns key error", func() { + _, err := libcni.InjectConf(testNetConfig, map[string]interface{}{"": nil}) + Expect(err).To(MatchError(HavePrefix(`keys cannot be empty`))) + }) + + It("returns newValue error", func() { + _, err := libcni.InjectConf(testNetConfig, map[string]interface{}{"test": nil}) + Expect(err).To(MatchError(HavePrefix(`key 'test' value must not be nil`))) + }) + }) + + Context("when new string value added", func() { + It("adds the new key & value to the config", func() { + newPluginConfig := []byte(`{"name":"some-plugin","test":"test"}`) + + resultConfig, err := libcni.InjectConf(testNetConfig, map[string]interface{}{"test": "test"}) + Expect(err).NotTo(HaveOccurred()) + Expect(resultConfig).To(Equal(&libcni.NetworkConfig{ + Network: &types.NetConf{Name: "some-plugin"}, + Bytes: newPluginConfig, + })) + }) + + It("adds the new value for exiting key", func() { + newPluginConfig := []byte(`{"name":"some-plugin","test":"changedValue"}`) + + resultConfig, err := libcni.InjectConf(testNetConfig, map[string]interface{}{"test": "test"}) + Expect(err).NotTo(HaveOccurred()) + + resultConfig, err = libcni.InjectConf(resultConfig, map[string]interface{}{"test": "changedValue"}) + Expect(err).NotTo(HaveOccurred()) + + Expect(resultConfig).To(Equal(&libcni.NetworkConfig{ + Network: &types.NetConf{Name: "some-plugin"}, + Bytes: newPluginConfig, + })) + }) + + It("adds existing key & value", func() { + newPluginConfig := []byte(`{"name":"some-plugin","test":"test"}`) + + resultConfig, err := libcni.InjectConf(testNetConfig, map[string]interface{}{"test": "test"}) + Expect(err).NotTo(HaveOccurred()) + + resultConfig, err = libcni.InjectConf(resultConfig, map[string]interface{}{"test": "test"}) + Expect(err).NotTo(HaveOccurred()) + + Expect(resultConfig).To(Equal(&libcni.NetworkConfig{ + Network: &types.NetConf{Name: "some-plugin"}, + Bytes: newPluginConfig, + })) + }) + + It("adds sub-fields of NetworkConfig.Network to the config", func() { + + expectedPluginConfig := []byte(`{"dns":{"domain":"local","nameservers":["server1","server2"]},"name":"some-plugin","type":"bridge"}`) + servers := []string{"server1", "server2"} + newDNS := &types.DNS{Nameservers: servers, Domain: "local"} + + // inject DNS + resultConfig, err := libcni.InjectConf(testNetConfig, map[string]interface{}{"dns": newDNS}) + Expect(err).NotTo(HaveOccurred()) + + // inject type + resultConfig, err = libcni.InjectConf(resultConfig, map[string]interface{}{"type": "bridge"}) + Expect(err).NotTo(HaveOccurred()) + + Expect(resultConfig).To(Equal(&libcni.NetworkConfig{ + Network: &types.NetConf{Name: "some-plugin", Type: "bridge", DNS: types.DNS{Nameservers: servers, Domain: "local"}}, + Bytes: expectedPluginConfig, + })) + }) + }) + }) +}) + +var _ = Describe("ConfListFromConf", func() { + var testNetConfig *libcni.NetworkConfig + + BeforeEach(func() { + pb := []byte(`{"name":"some-plugin","cniVersion":"0.3.1" }`) + tc, err := libcni.ConfFromBytes(pb) + Expect(err).NotTo(HaveOccurred()) + testNetConfig = tc + }) + + It("correctly upconverts a NetworkConfig to a NetworkConfigList", func() { + ncl, err := libcni.ConfListFromConf(testNetConfig) + Expect(err).NotTo(HaveOccurred()) + bytes := ncl.Bytes + + // null out the json - we don't care about the exact marshalling + ncl.Bytes = nil + ncl.Plugins[0].Bytes = nil + testNetConfig.Bytes = nil + + Expect(ncl).To(Equal(&libcni.NetworkConfigList{ + Name: "some-plugin", + CNIVersion: "0.3.1", + Plugins: []*libcni.NetworkConfig{testNetConfig}, + })) + + //Test that the json unmarshals to the same data + ncl2, err := libcni.ConfListFromBytes(bytes) + Expect(err).NotTo(HaveOccurred()) + ncl2.Bytes = nil + ncl2.Plugins[0].Bytes = nil + + Expect(ncl2).To(Equal(ncl)) + }) + +}) diff --git a/vendor/github.com/containernetworking/cni/libcni/libcni_suite_test.go b/vendor/github.com/containernetworking/cni/libcni/libcni_suite_test.go new file mode 100644 index 00000000..22ab4d78 --- /dev/null +++ b/vendor/github.com/containernetworking/cni/libcni/libcni_suite_test.go @@ -0,0 +1,65 @@ +// Copyright 2016 CNI authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package libcni_test + +import ( + "fmt" + "path/filepath" + "strings" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + "github.com/onsi/gomega/gexec" + + "testing" +) + +func TestLibcni(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Libcni Suite") +} + +var plugins = map[string]string{ + "noop": "github.com/containernetworking/cni/plugins/test/noop", +} + +var pluginPaths map[string]string +var pluginDirs []string // array of plugin dirs + +var _ = SynchronizedBeforeSuite(func() []byte { + dirs := make([]string, 0, len(plugins)) + + for name, packagePath := range plugins { + execPath, err := gexec.Build(packagePath) + Expect(err).NotTo(HaveOccurred()) + dirs = append(dirs, fmt.Sprintf("%s=%s", name, execPath)) + } + + return []byte(strings.Join(dirs, ":")) +}, func(crossNodeData []byte) { + pluginPaths = make(map[string]string) + for _, str := range strings.Split(string(crossNodeData), ":") { + kvs := strings.SplitN(str, "=", 2) + if len(kvs) != 2 { + Fail("Invalid inter-node data...") + } + pluginPaths[kvs[0]] = kvs[1] + pluginDirs = append(pluginDirs, filepath.Dir(kvs[1])) + } +}) + +var _ = SynchronizedAfterSuite(func() {}, func() { + gexec.CleanupBuildArtifacts() +}) diff --git a/vendor/github.com/containernetworking/cni/logo.png b/vendor/github.com/containernetworking/cni/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..50c54d2f524e76475b01bd8fbbc2b5b7a57fec4a GIT binary patch literal 11604 zcmY+qV{~RgyDj?0wr$&bW2a*$9ox3ej@_|svt!$~*|C$;-`@M~drpl}nl)?AdTRYy zqpBhm}hWuA%tC(y3tH8~L<%9u%`Z%}`Lx_KUVq+;~ zIRL?=#fGaZqaBctq@TLO*SPoeoO2B^uFb+~$&Hw--*?%&KN3ozA z005$8sjBIsDJRQoY;VhGXku?<%IIP1@Q)1u06lpBHEm5@42eB#ZS0(RJ@`rgi^2P^ z{U4Z#l=#0WF4p{{nsSQ7qV`Uv#2k$5jLf70u*Af~KqnJ3US%kHO&VY3E|-!C>c1_TM7^pN^QRv$2zA%ppeAF<&4*zo5^gG02h(9lRaR2Qaf9z&k6s|>pBlx+UbitDh38m zh1BFkhEV&L6YZ#92CKdt^2)+IIxBoR?F@?mj~z4*I8?4eiB@9-xpe8}rL*+>NfLd` zkUOas<$M92qb(`|p^`Sl} znLY#Tq)%~H6QbgxWEhnAa(^=L6)*SdBPVnU^2?gaDeXnvj3GWpS=Q7>vL*SVg52wyu&$oJP!*(8ovViK8^V=T z^#ad)*$yd6>`lN>0uVw!7F)K&#%J^-GcwZPY93z6M`d~37^Cm=2j=4iA@H+>dDG|i zPJ?BfXqYYp=JZvqE}W6c(Uq3@AyJfeQJyzBm$_cw^OSk7bb{QmD=)R|ItfuTl~_1H z7XSKEkAR;*=L@MjZg+42F|EO83u~VbaNN!)SVuecAPSH|hxbS7yc4EQ@sFq}F6IHD zMHap@FABOK47_Vc-+YHv3oC`|#gY0Uv7Vx6hsmw#mz))ASK!0^z|rQ5xm}A zU|MMw82LAqa=v6wAtCNTQ)>aI&N)x;o{}5VdGrd1Wn16yQz7a?50};C9weBg2mc1@ zIz8o%EnL}edPFtdK0-lw8k0J+XW6!o)xz`|k-Aox^pC%% z0`2H$I%jgjsZ=4nCbXHB*63L9%;yiLJdE~2{0|_lkPuMX8mw5u#AWSc7D^|s)`1P zkZJX&Wfi9$+~wEsO2_kz0B4A{iNjwy-$=VvnH8f=&S9TGs!uZ)4#O#!a1gBO zsD!pymARY`LHxk9N^0&KbT>jr>KBePgKcJxS++1M>0c3v*vQ8XQL%M@E<+! ziPUa6mG>T>FZa3eWq&KVsSqloS?$Yiv02wZA>wb}VvmZ;1daLP3!*%raUJXg4P*GJ zdOi=4Pg?~1_RxfjgY8t0?t&?g7jeABBGn7f{G}(R1g@p5!WG#CJXQA**5Sqtw~_~| zSH$&P%bk^xRZ|yu{i=@7E+IA4ruQ5^akG13`UA1xR-3->`BmO#jo8GGlvd8Lc7J4w zDB3BgJZ1&v^e9ey*NQQe%D_j!dM~F&v%R4X+jzon_kExwrF54V#w)r(O%&lM0?B;qH`*CzonG_4e*WItPK*PQVRx<-?!$wOG4_jN(O5_CS%RV{^me{i~b z?TpQE0JjOZM49o+yi~(ECuK%n<@(NAXaP#(8t#7l8>f1bNPDS+-+pNbOhFdysMp%n z-&jPmrtUpG?U8Gc?0$C{0i7@oighcV*04*%o7s3cJ)ezoI8hS5Z9_NcRMCCC{ojAi zst-YN?59!$$h1mQS5+qMJtLBna^l+d-H|OZ-Aovhf-24`U8gR?+%hE-lUi%O0y@7HPa>$UWu z)MGqc2}qm$u- z%WSPB-`uGQF7u145*HM!&U7d`mOJMalYatjkh8_ZX)enaZ*Y=+-g0&4{B;BU%l!6d(lOdxPK0xe^zmAa*iUAVR29yHHpL5w9hV#M}dJqUReKeXH=ePDqy#<=Kl0)w} z@T-ya9d#a>4r*LcIeYhEJllW}yf&PlDQeZR+-guy%l1UQ&*xh=ofl510?HuF;fv%; zA&;aSZ;-t%S#G+aQOZ$34knV!Vy8!0HlLolx|12%T$z|X$?wAxWXsQ6OqMO0&&s;9 z=0Y~jl(V?Fxe)xuc#-sWrpf=C3cUs!ilspv-Mp7Ug<)q0#>kRH9o!4B2)t`6ndb-= z6z;LI3$`lUPwzLC+`C+$+I`B_4CBE#a;V_{F=tPueD@N6+B#(8I;ZU#7kS*|WD1uq zwqXe&TaYCS9{O2KsyFuRuXUMmy zMtAgj5;Q<|8h+MNGuke)*{~1@_o(0*%?Ag!p~$TWeSZL(A7J8%74=6r(O3Y1u&Wc6 zctUX|=y^Xm7ewPpSoMr6U6m@|`9?XUq~GC7>9AFnCi*n&>qK6ah8vuR9OH`kj%bN_ zNM(w~4h!s3?bcTw$I^j#ACnl74;#M&H`kKg=b?l)!EDYT<>U+NSUzknu9qWQMvtqn z$_sA-)O|Kj7z4`Lf`dy7W9exp)O6Fr24G@JRU*U3&Ww_M3c2EhiXgSEskWF45?FKB zWCdc&6Vo*AAJ29x91*Zl?&FU%u7wzi(a6QnUkSV7*q_~4^77L@TjWZ6rZD8?kD~ai zx#o`!3(g`*ivOm@(9mX6U*K=8Du;sP zGD-2?Ep!sq@4UiVGjA{FlP%+5zFaR>p>As^6@7f{Q$Q{X33zw z9g?<_+3QcsMOa8DoqpeV;~iu2n><4@Iot6;Gp294RNfqkZE);w=Q5v-0rqA0JihT) zE16~4J#WvioU#K7O}MmqKkRdFIwHWx7irt}Z<4HB06pIIvGTYJ`0vt!t*!Wj=h?pr zyR78z0qZjwhcO|3>2U&j;0_sdt)NnFs_M~BZeD{B_p=U&#h5@V$T9GCBOke76}@nu z4{TBc+K&@XRS^AdwN2gKb-1#weTMa)EEw4zO27PWZ9G&XmP>zmA*k4~dG2E=WpW}V z9*o-o3_;t@oP}e3X*VJU%PmczXDXH$EDlH(>A)r(*{P2pHn}Rg2pP@CL?GF$Eukz< z&CBI3$UWqWku?qg$E5`ymum)amx?I6(VWQIgS=^tS0?EJ&xT&!#Hj4>+xMq4IuGXN zu3Ic9{Z|~c88LyKb&x%*H^$J82ttTe6~?A|3bL;;O^_@SPmE5ibY*qBZx!#rbF&J> zP8McQt^27qlPAWPO)k|Vb8#n!il~JCOGBb;GR=t{E)8}brj2&>2D-?qhq=EK{unYW zT=z6G{@ul+X7eV~^4?zs7`hhX)3~(SmWnj%dwEY4A6B)s9Zc%h;UBHM-lH+NOw2Hs zKhJCeNF8V0dgGg+(-4YN&s}sz-eNZ3{5(U|Puz>U1KW24_=CKq=%>Ypn(+BrK#NO7 zQtil>8Y55-wnHJWAc^plD(X$4WOe6|tqzO8Q&k|c;aS*1f!i6-ZkMGonfho6l zSW_V3Sy$RGowQU{@B8qJf8S(iFlhDRpQ}e1qU(p{^$}YHy#Yrn z8bc_MVXLXsI&$A&Lx+@noL|%VdijJjRhWLdG4g(+!+#kzc|UU|cP1%I{vIF7IzQgk za&h2;$NgGT_%g~_Etj@n z^@sY|ET zQT98gj4GS`_11hC(}}CilC6$8Incij7lcP&v)g~nQ=1l-U)izAu%C?Bj%{QN%6kvX z-qBo$_ylp-%7GlbTf?Zg31vH3s9yag`~Kt}=sSwP3|aH{8zh}m6UR643BoKt$BE^y zW+CJ&6yq@lW>EkLA!V8oWX}MKUR$OVSke!%oy$#n#zlV%{JiGdM$3Z?)&~2XT9O63 zqK53B(y)R6t_PD}ZzA+uPk9AhG=L@eaL3sYIW)?39e@9z2DVm1riFXJ8AQjC0{>ZD zAtlMT0_Y2eb$TPc(txR-$nzJdRu|#pWU%6HT`pS9o_&-3P0ZhRtmx~^#}QECp=0!u zQJ)}dNXU0T<%4YIaMB3zF5xiNq&FlHO(fVjj8xN$XK&*j$_E(66ArQ~`e0PtpN{e!y9+(FEK5>c|tE`0M z#fv&n5>0)VzO`cw>Lc270p?L4FhdCqN{Q6 zx=Zs6(j@|+b}ctyZVpLh7oPW{;Bw2MEgM15y>Y9SrugM4d;jde+iK!`0<3Qp68Y>X z#Cm1lW|&qxsO$U7x0Mnz9SLa8NoDWdm={ru0bt(UNp;PRXq!5EpjuX_ri2G8=-V~o zh0cGgyV2pT035n($y$4QpA}P_oXv=284a}{7`?C*YGEj_LY^nG*)VsEktrC;uX)0M z+FgA!ql@CjtHP3z995a-8K+%;R`=0e{qxkjr?&Klm%h4*sAsCylL4Q zcEi&rb0?Z0m41xt61TKLDN< zlH0tWmAl<#>7e4$V~gO#5`lgq8`AbKw%6*B;?**g2g|M*^R^14x;fZ&$AURe z2SLHJ$~dtyRhlI%(r^fb!qv^vl56Z@(rtYFQ?GX9D9Y;FEy1VqZDQIlihRaFP4)WO zgWr}QtmSVNN98t8BlEisA$a~6LT-D0D#+JDE^Tl1^L$T(YRD8SGLi?#wKeSL+eTxP zw>@nP_HDVMb`|!XTaK>kAz~c%yXVCC>{i6E&nB%v50aTUmOHT!qMWx@?5x4ktR&CC z9)g}two7GfLR7(VuCB5PFWGYMa?HwhR(EmIPBjMBqo%*-c;M-ij`iiQ za^GL#@)W>9l(`)D(Ec#4Y3F);7^d#3HV5I>nD)pYnsf&Td#+z>3S)UKw#WsAQxWtC z!!3iYN=Qs2(2{{rN)fQ5`x8;>TO@Q6u@hJL`*Ko>Sz!q`#J;Dk(qMX6rft6P%drV$ z&pu0q&nDsW{;Hx0wLm+rkj{I(@L(qSVl zpRQoMN5c+R-A1QmdYbn5m=&*VTAu#Bm?+_amS>z73l=B|diniwoJ{qNTEZ@G@7f~A z3Y!n<7>S;z4&C(7X{e?$s>Ywvdq+*ctKWHae$`p=>9U>AKsmlY1hR#-J7JtWh#Bd)ZNjj}MIgvqr2ZBO?(D>hV+*=VgZ!KR>e{yB^Gk@(O^ zPNxaaS=#6Y>(0d$ys2)wDjwgja9ADKnk)td4xdm-6&-g&Iz2hXYt`^~n0OBS&59m> zp`<^D_O;_CC&4d8a>~UEo+}(3D^L)_3w}RYk<(7CueaVX5rCnvUx2mxQ z^<@!8tz2~3h7JB!O*7H$~N~5T+=A(pljtVkWe&Q?9%(01+bm92TrXuRsG5k_UL6F&F>TG;m>S zX`ml(c8W7Me)^zhv%;cb>=b#Xrc%kF)97wBJG|eMo~%HP*i6>Df4Y2vxRri=v&A() z%WI@NhoLFz0l&Ga9~d!5OXnYy@vs|J`QA0|d4AERrm*C{(fc&u6gN;ksfZu@N4nxX zMqSkcG2A$zmGtr_t3j`x@I`t(J|4HpG6(4FygH)vPq1vy4036_-V_b$cu#HdA-w>g zy~6f5RdoH)PnSV$!>WRoK&mPeZeeiplf$e_n-$cb9fkgB^&47n;9yarTF9@qGmYcY z)lhhIr({tJp18fkxe1lw!77bj&nHV0VBE2PxG2}4j9!KltxbcErR7f`AY0KQYa~09 z8ocxy&&zhKvR^qPqPr|m<3Kv~@fUBbh{VqmJBHGLi1BC#brH27Nwxgb## z|IVVs;x!coM^2TqN=BomjGjKVE-<<#edB)dnpiEhWEl+7onKZ~eVx2qa3~JcZaCM` zt8ctC^S81(O2693{=wLdPQ8-nQSsYqGm@uzl1f6NR(GrK%*j#AG95lNR5&cA))zcB zd?dQX-OdS-iCnzMZDH#KGh46dNr(^D#?(uYoqIG(lC^CQIs zE=oGP^|pWe(4S-)?p3?*+Bx zkjOpPi@h}m!r=ik7YR_|<&JMG*o#KJ%eezCNLNgWv?CQZ1IIQssXR$To|#{c<2>e@ zNW_%ogzk9x9_+sDMbgiLTix%7n9dO&2?|!}1^hrEjihGv29FNeK~!mf0!`cH-DY9?O&M@nE7-nu3f=OU?HfKZ?Sm!bV% z2uMB{Sw)>0biuZAGmvDuN5hr%CyF!~`e;h~H7CjzBtg(nSFltWN=W4_FKHM!X&S11}_8OWhtv07&;S?MvZxKscN?UTxu-~>2TQ~4R;p5?7Q+9jC+wZ-fw=*DXu)*4wH(@70 zBYf``FpRTEeyE_U@ka)aL|hh$(}^q)p3fcNsoVAkAWntCzl1+Fz6?CE857 zxASA&LH1Zscj44r4C17@N6}PS9dwivpk4`G+UPfk$=!uJif1oO9;nc}!yDnuG=mH@@pWx*+NQ=6KRC zJ~oy=@K|>V#%;fGY)zr&C8d;&<+zDH!ERmed>Dw6U5mQ0a<$(pac!7Qh#|xP>no8k zK=l~&<|B^yJlf`nI<}x1SII9F>S=0%i|Dz(h?xDyZXDet4(ftYgoIHHnQGT{a=u{Q zL!oO01O`nE`RzziHRobL85RjQRrj~ZQdsF#6%sVgXQy)yxzFaQndo6VLTe0^TTBM(^$Q zbH1z#NdiSm^_Lgug!)@x?o_(ij7zv^JKFjRUKRC9z2AKoN~+oRO8o&L&t0HCj-9RVP zv{#g_#N4!!6L~C69y~f28=UL}h84?e=C;bSqXi6Y|#M@-gXLd0hO28tH zYO3##ziq!Tth`?<fH#{au}#twb5{M?lM>1FgLNX~aC01eka0PB09xFp@G=dsqH@#nQEns6>R zg!O{LxRG|hPQRc0Zp%@Nsvd5QQRe*oBcaV*2V|VU1hI>F)^xvo|TpokkoUenBdPo06|cF6`xQ+rBC1*(9COe(y;Q?e5Ea} zeo`U-XtbKtMFc<;_TZX6N#pa=VgCv`oSjnzV#a*Cerp*98uz)1MSp+JG=AUC#HDpV z4wWWweLs$swDzoSPn;vyLTQ~)eXWE8!~o7j=HB-QaR=LP`$;I#f4&~zzorA6En;UB ziX=#T2~)eF>6qW2(N5%q0x&SaJcH;m0o#$JRLI6c@&Dj8corXcQd(Xx^qXI;S~xi%Ao#Eh z3mHvjQkQEK&_t{oCw*M7>oWqnJeY+AWZlOCu$?u3JV3YA!_AdRpaI$Jq;;_g9=JEJQbCoC;}TQrg#h^2g1 z1of}w^m1mXTG2-EgNZ^7G7)!*hl zmc!u7l%y3u2%Uzrrh-?!M}=J8)D~B81)2XMryNg1$t}4MDA!HH9SgY-9gwsG!5)x$ z7aTHa@VjFExf=n!YI*Ky1UM#GV$Mg9k1_-?t++M4Yt9~E z#tMlksoWa992hS?!MdNh`}Yb!kRT29yok$)fuugH!b@~OPn1`&Y=8SJA}VAvi?lm; zU;I_yqu$~p@uM^j%=$|-=f6Jrim zm;z!5vD{D}s$euih%((<%!S+ZH^Bp3_dLTa;(KUm5_tSS8JGp)eyLt1K5*Bc*!#UG zXdq=ZD3)n>wdYm6g%0sX4S~MAt3}&BV^wKI0Wf783^>P*@p@x62g(i+q3=TL9id3Z$Yc55lt_r2FlLCEgr_4a>1RD~?BT=P!*% z+~LN>c7IsCgmw*T{vSPDO~VTbx03WPw_;1T`dBj$Tum;%uYlxu04vxyWfYHgHSNh@ zFZ+rW#YfH0Aq6(e3-!Ec6U!S!<~X01>D;T-F>sZN!Ebw=3|am#^x&jiNMeQgf2W@P z%70&FA;RGiWKel0Ri#mxdOBH(y_CDm32T0#IdLurLoT_Zv+;!J?9W}N0C82ULAlXX zz~FXJ{n%;-zvJ_Uvdpxr$UHu{hb?=8sZDzq=3gjiJQw+o(B3@%6yM?rcK`K(JH-D( zMfARtqP{z;^zxDIRpKXX{RvljDi9H3{HcaX{D>F1l6#3aFM@Gl}5`k41s!Q*Tx{jiep6HX@ij9Rf4$+_4mv|B8gD$WsohwI>T zKQ>>9t2D9dP&|#xJ4YhUaYf!%z|UYPYnn_SPNeTb4p>)ZZs&(4a3IfZD%tP)Hh9_u z+Y3J#OA#AA39b8_MlKjd71b%}89ZRiG?*`O`9%SSgXQFZuve>G?VbJBHGDQN#DsxvB^EygQBytb=jH<($+> z<^dBc60Rc)Fp9lkIyEYLByWC_B$Jf-~$r2$|;U1YwZlJ+w7Wok5z!NbrwuiiZGlxl+A>u;FCYDkhFa zCvc`QMX^qnV|*wX;sMJqMYPvggQO`{4h7pi)RP;bUA#QfDk;cqyh?^5!eAy|b(yHr zVRs`JjG@rn3~ou66>T!Bk{+UZt5pg!#g)SvF(R{!J5>QJ#tYK(tn(O}^7AvIgBvml zBw7h$&5qqcCcsKr68E<~Z{6{UYT`Y(&b-E8`>!$|AV2vu59{!m;L9Sp*x=ML-{{Lw zO>@L)dbP9!s-x_p3s0QL{nR`P*>ME&6+>m!!mP)S=~2FiAP|?EI=&UZUXT{Q z0_SJ_;H_4bwQjj-T`sqvJTMMY*luhgF6!B!V<&W%<(FRwvFnF~RGe@(vi+jPpAC3M zuCo3T^TabSF(;S8-YSu(0jJ^Y2>c1NQF*anzqQ}zjvRjEq?-6bAGrt~(xloRF2C?h znnz&aZ72bxR}-aP@-+S7?YbGYe9#KjCyv!4F-kqLt)%zH8bzfg_H4t z_V&O)q@00F#`;Jlw4a8cSNg_n%ahV!3&LD4XC}IJq**oS>#=cuS(|`KyEWH zcC$uNnH%2}Z<$9mSa4rTqm)0B5W&0I|L)&TR}wI}Fx=cGk1-R@-_EV(ePdTM zvy#i4E$HL)J!4aZR}1IyH0`8NV51=TGO6$*u~GxE%_xCSeXg8Mp6~Dzjn_1#O1X;~ z)RtnXcdE7GkxU4{MVnQwJZ1}1Z4UxjWy-u>b7=WOg$P*`*S<>3+Zi9;T96bDUN|rl z)cCY;_nQ#A@XJ@^31W){?no1_%s2RKNCRzHI}BX3*P*)T*TLXEoqP?D9V%C7^@Fsa z4g28w?g+0^9pdYH9RckzW#ujl>N9^y{c!_jPhrchJX``kWtdSCEpYVO7my!)g~Gj= zMkz`w+CuRM#YG7TZC?ULh;*aD)hr&iBmgt#&>wV7ja~d_v6Uo@H6!N45pe^M&|$cE znC#A5BjH&emL9C;@&oro=}9T*&gY2~#eZ*0^NE=9^vl@Pt2e7I?$nxo2e8sCfq!In zAmPRm`Sm9@JZSg;Ukoa+b$cCEXv+NL65qYgIhum}5PQF=E}awqy(8qs*>C_5quNu( zAIh?VqFLDPwF)I3IT#;Vxt@p@%WMMyMXknJFlA z{${)NCiyh5PD_ydNmHOESG!Uap5i*l1~6$2N3HtsPsxu6`^og masklen-2 { - return nil, fmt.Errorf("Network %v too small to allocate from", conf.Subnet) - } - - var ( - start net.IP - end net.IP - err error - ) - start, end, err = networkRange((*net.IPNet)(&conf.Subnet)) - if err != nil { - return nil, err - } - - // skip the .0 address - start = ip.NextIP(start) - - if conf.RangeStart != nil { - if err := validateRangeIP(conf.RangeStart, (*net.IPNet)(&conf.Subnet), start, end); err != nil { - return nil, err - } - start = conf.RangeStart - } - if conf.RangeEnd != nil { - if err := validateRangeIP(conf.RangeEnd, (*net.IPNet)(&conf.Subnet), start, end); err != nil { - return nil, err - } - end = conf.RangeEnd - } - return &IPAllocator{start, end, conf, store}, nil -} - -func canonicalizeIP(ip net.IP) (net.IP, error) { - if ip.To4() != nil { - return ip.To4(), nil - } else if ip.To16() != nil { - return ip.To16(), nil - } - return nil, fmt.Errorf("IP %s not v4 nor v6", ip) -} - -// Ensures @ip is within @ipnet, and (if given) inclusive of @start and @end -func validateRangeIP(ip net.IP, ipnet *net.IPNet, start net.IP, end net.IP) error { - var err error - - // Make sure we can compare IPv4 addresses directly - ip, err = canonicalizeIP(ip) - if err != nil { - return err - } - - if !ipnet.Contains(ip) { - return fmt.Errorf("%s not in network: %s", ip, ipnet) - } - - if start != nil { - start, err = canonicalizeIP(start) - if err != nil { - return err - } - if len(ip) != len(start) { - return fmt.Errorf("%s %d not same size IP address as start %s %d", ip, len(ip), start, len(start)) - } - for i := 0; i < len(ip); i++ { - if ip[i] > start[i] { - break - } else if ip[i] < start[i] { - return fmt.Errorf("%s outside of network %s with start %s", ip, ipnet, start) - } - } - } - - if end != nil { - end, err = canonicalizeIP(end) - if err != nil { - return err - } - if len(ip) != len(end) { - return fmt.Errorf("%s %d not same size IP address as end %s %d", ip, len(ip), end, len(end)) - } - for i := 0; i < len(ip); i++ { - if ip[i] < end[i] { - break - } else if ip[i] > end[i] { - return fmt.Errorf("%s outside of network %s with end %s", ip, ipnet, end) - } - } - } - return nil -} - -// Returns newly allocated IP along with its config -func (a *IPAllocator) Get(id string) (*current.IPConfig, []*types.Route, error) { - a.store.Lock() - defer a.store.Unlock() - - gw := a.conf.Gateway - if gw == nil { - gw = ip.NextIP(a.conf.Subnet.IP) - } - - var requestedIP net.IP - if a.conf.Args != nil { - requestedIP = a.conf.Args.IP - } - - if requestedIP != nil { - if gw != nil && gw.Equal(a.conf.Args.IP) { - return nil, nil, fmt.Errorf("requested IP must differ gateway IP") - } - - subnet := net.IPNet{ - IP: a.conf.Subnet.IP, - Mask: a.conf.Subnet.Mask, - } - err := validateRangeIP(requestedIP, &subnet, a.start, a.end) - if err != nil { - return nil, nil, err - } - - reserved, err := a.store.Reserve(id, requestedIP) - if err != nil { - return nil, nil, err - } - - if reserved { - ipConfig := ¤t.IPConfig{ - Version: "4", - Address: net.IPNet{IP: requestedIP, Mask: a.conf.Subnet.Mask}, - Gateway: gw, - } - routes := convertRoutesToCurrent(a.conf.Routes) - return ipConfig, routes, nil - } - return nil, nil, fmt.Errorf("requested IP address %q is not available in network: %s", requestedIP, a.conf.Name) - } - - startIP, endIP := a.getSearchRange() - for cur := startIP; ; cur = a.nextIP(cur) { - // don't allocate gateway IP - if gw != nil && cur.Equal(gw) { - continue - } - - reserved, err := a.store.Reserve(id, cur) - if err != nil { - return nil, nil, err - } - if reserved { - ipConfig := ¤t.IPConfig{ - Version: "4", - Address: net.IPNet{IP: cur, Mask: a.conf.Subnet.Mask}, - Gateway: gw, - } - routes := convertRoutesToCurrent(a.conf.Routes) - return ipConfig, routes, nil - } - // break here to complete the loop - if cur.Equal(endIP) { - break - } - } - return nil, nil, fmt.Errorf("no IP addresses available in network: %s", a.conf.Name) -} - -// Releases all IPs allocated for the container with given ID -func (a *IPAllocator) Release(id string) error { - a.store.Lock() - defer a.store.Unlock() - - return a.store.ReleaseByID(id) -} - -// Return the start and end IP addresses of a given subnet, excluding -// the broadcast address (eg, 192.168.1.255) -func networkRange(ipnet *net.IPNet) (net.IP, net.IP, error) { - if ipnet.IP == nil { - return nil, nil, fmt.Errorf("missing field %q in IPAM configuration", "subnet") - } - ip, err := canonicalizeIP(ipnet.IP) - if err != nil { - return nil, nil, fmt.Errorf("IP not v4 nor v6") - } - - if len(ip) != len(ipnet.Mask) { - return nil, nil, fmt.Errorf("IPNet IP and Mask version mismatch") - } - - var end net.IP - for i := 0; i < len(ip); i++ { - end = append(end, ip[i]|^ipnet.Mask[i]) - } - - // Exclude the broadcast address for IPv4 - if ip.To4() != nil { - end[3]-- - } - - return ipnet.IP, end, nil -} - -// nextIP returns the next ip of curIP within ipallocator's subnet -func (a *IPAllocator) nextIP(curIP net.IP) net.IP { - if curIP.Equal(a.end) { - return a.start - } - return ip.NextIP(curIP) -} - -// getSearchRange returns the start and end ip based on the last reserved ip -func (a *IPAllocator) getSearchRange() (net.IP, net.IP) { - var startIP net.IP - var endIP net.IP - startFromLastReservedIP := false - lastReservedIP, err := a.store.LastReservedIP() - if err != nil && !os.IsNotExist(err) { - log.Printf("Error retriving last reserved ip: %v", err) - } else if lastReservedIP != nil { - subnet := net.IPNet{ - IP: a.conf.Subnet.IP, - Mask: a.conf.Subnet.Mask, - } - err := validateRangeIP(lastReservedIP, &subnet, a.start, a.end) - if err == nil { - startFromLastReservedIP = true - } - } - if startFromLastReservedIP { - startIP = a.nextIP(lastReservedIP) - endIP = lastReservedIP - } else { - startIP = a.start - endIP = a.end - } - return startIP, endIP -} diff --git a/vendor/github.com/containernetworking/cni/plugins/ipam/host-local/backend/allocator/config.go b/vendor/github.com/containernetworking/cni/plugins/ipam/host-local/backend/allocator/config.go deleted file mode 100644 index 8c004489..00000000 --- a/vendor/github.com/containernetworking/cni/plugins/ipam/host-local/backend/allocator/config.go +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2015 CNI authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package allocator - -import ( - "encoding/json" - "fmt" - "net" - - "github.com/containernetworking/cni/pkg/types" -) - -// IPAMConfig represents the IP related network configuration. -type IPAMConfig struct { - Name string - Type string `json:"type"` - RangeStart net.IP `json:"rangeStart"` - RangeEnd net.IP `json:"rangeEnd"` - Subnet types.IPNet `json:"subnet"` - Gateway net.IP `json:"gateway"` - Routes []types.Route `json:"routes"` - DataDir string `json:"dataDir"` - ResolvConf string `json:"resolvConf"` - Args *IPAMArgs `json:"-"` -} - -type IPAMArgs struct { - types.CommonArgs - IP net.IP `json:"ip,omitempty"` -} - -type Net struct { - Name string `json:"name"` - CNIVersion string `json:"cniVersion"` - IPAM *IPAMConfig `json:"ipam"` -} - -// NewIPAMConfig creates a NetworkConfig from the given network name. -func LoadIPAMConfig(bytes []byte, args string) (*IPAMConfig, string, error) { - n := Net{} - if err := json.Unmarshal(bytes, &n); err != nil { - return nil, "", err - } - - if n.IPAM == nil { - return nil, "", fmt.Errorf("IPAM config missing 'ipam' key") - } - - if args != "" { - n.IPAM.Args = &IPAMArgs{} - err := types.LoadArgs(args, n.IPAM.Args) - if err != nil { - return nil, "", err - } - } - - // Copy net name into IPAM so not to drag Net struct around - n.IPAM.Name = n.Name - - return n.IPAM, n.CNIVersion, nil -} - -func convertRoutesToCurrent(routes []types.Route) []*types.Route { - var currentRoutes []*types.Route - for _, r := range routes { - currentRoutes = append(currentRoutes, &types.Route{ - Dst: r.Dst, - GW: r.GW, - }) - } - return currentRoutes -} diff --git a/vendor/github.com/containernetworking/cni/plugins/ipam/host-local/main.go b/vendor/github.com/containernetworking/cni/plugins/ipam/host-local/main.go deleted file mode 100644 index 2f77912b..00000000 --- a/vendor/github.com/containernetworking/cni/plugins/ipam/host-local/main.go +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2015 CNI authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package main - -import ( - "github.com/containernetworking/cni/plugins/ipam/host-local/backend/allocator" - "github.com/containernetworking/cni/plugins/ipam/host-local/backend/disk" - - "github.com/containernetworking/cni/pkg/skel" - "github.com/containernetworking/cni/pkg/types" - "github.com/containernetworking/cni/pkg/types/current" - "github.com/containernetworking/cni/pkg/version" -) - -func main() { - skel.PluginMain(cmdAdd, cmdDel, version.All) -} - -func cmdAdd(args *skel.CmdArgs) error { - ipamConf, confVersion, err := allocator.LoadIPAMConfig(args.StdinData, args.Args) - if err != nil { - return err - } - - result := ¤t.Result{} - - if ipamConf.ResolvConf != "" { - dns, err := parseResolvConf(ipamConf.ResolvConf) - if err != nil { - return err - } - result.DNS = *dns - } - - store, err := disk.New(ipamConf.Name, ipamConf.DataDir) - if err != nil { - return err - } - defer store.Close() - - allocator, err := allocator.NewIPAllocator(ipamConf, store) - if err != nil { - return err - } - - ipConf, routes, err := allocator.Get(args.ContainerID) - if err != nil { - return err - } - result.IPs = []*current.IPConfig{ipConf} - result.Routes = routes - - return types.PrintResult(result, confVersion) -} - -func cmdDel(args *skel.CmdArgs) error { - ipamConf, _, err := allocator.LoadIPAMConfig(args.StdinData, args.Args) - if err != nil { - return err - } - - store, err := disk.New(ipamConf.Name, ipamConf.DataDir) - if err != nil { - return err - } - defer store.Close() - - ipAllocator, err := allocator.NewIPAllocator(ipamConf, store) - if err != nil { - return err - } - - return ipAllocator.Release(args.ContainerID) -} diff --git a/vendor/github.com/containernetworking/cni/plugins/test/noop/noop_suite_test.go b/vendor/github.com/containernetworking/cni/plugins/test/noop/noop_suite_test.go new file mode 100644 index 00000000..7d2cb326 --- /dev/null +++ b/vendor/github.com/containernetworking/cni/plugins/test/noop/noop_suite_test.go @@ -0,0 +1,45 @@ +// Copyright 2016 CNI authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + "github.com/onsi/gomega/gexec" + + "testing" +) + +func TestNoop(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "No-op plugin Suite") +} + +const packagePath = "github.com/containernetworking/cni/plugins/test/noop" + +var pathToPlugin string + +var _ = SynchronizedBeforeSuite(func() []byte { + var err error + pathToPlugin, err = gexec.Build(packagePath) + Expect(err).NotTo(HaveOccurred()) + return []byte(pathToPlugin) +}, func(crossNodeData []byte) { + pathToPlugin = string(crossNodeData) +}) + +var _ = SynchronizedAfterSuite(func() {}, func() { + gexec.CleanupBuildArtifacts() +}) diff --git a/vendor/github.com/containernetworking/cni/plugins/test/noop/noop_test.go b/vendor/github.com/containernetworking/cni/plugins/test/noop/noop_test.go new file mode 100644 index 00000000..bf92dabb --- /dev/null +++ b/vendor/github.com/containernetworking/cni/plugins/test/noop/noop_test.go @@ -0,0 +1,244 @@ +// Copyright 2016 CNI authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main_test + +import ( + "fmt" + "io/ioutil" + "os" + "os/exec" + "strings" + + "github.com/containernetworking/cni/pkg/skel" + "github.com/containernetworking/cni/pkg/version" + noop_debug "github.com/containernetworking/cni/plugins/test/noop/debug" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + "github.com/onsi/gomega/gexec" +) + +var _ = Describe("No-op plugin", func() { + var ( + cmd *exec.Cmd + debugFileName string + debug *noop_debug.Debug + expectedCmdArgs skel.CmdArgs + ) + + const reportResult = `{ "ips": [{ "version": "4", "address": "10.1.2.3/24" }], "dns": {} }` + + BeforeEach(func() { + debug = &noop_debug.Debug{ + ReportResult: reportResult, + ReportVersionSupport: []string{"0.1.0", "0.2.0", "0.3.0", "0.3.1"}, + } + + debugFile, err := ioutil.TempFile("", "cni_debug") + Expect(err).NotTo(HaveOccurred()) + Expect(debugFile.Close()).To(Succeed()) + debugFileName = debugFile.Name() + + Expect(debug.WriteDebug(debugFileName)).To(Succeed()) + + cmd = exec.Command(pathToPlugin) + + args := fmt.Sprintf("DEBUG=%s;FOO=BAR", debugFileName) + cmd.Env = []string{ + "CNI_COMMAND=ADD", + "CNI_CONTAINERID=some-container-id", + "CNI_NETNS=/some/netns/path", + "CNI_IFNAME=some-eth0", + "CNI_PATH=/some/bin/path", + // Keep this last + "CNI_ARGS=" + args, + } + cmd.Stdin = strings.NewReader(`{"some":"stdin-json", "cniVersion": "0.3.1"}`) + expectedCmdArgs = skel.CmdArgs{ + ContainerID: "some-container-id", + Netns: "/some/netns/path", + IfName: "some-eth0", + Args: args, + Path: "/some/bin/path", + StdinData: []byte(`{"some":"stdin-json", "cniVersion": "0.3.1"}`), + } + }) + + AfterEach(func() { + os.Remove(debugFileName) + }) + + It("responds to ADD using the ReportResult debug field", func() { + session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter) + Expect(err).NotTo(HaveOccurred()) + Eventually(session).Should(gexec.Exit(0)) + Expect(session.Out.Contents()).To(MatchJSON(reportResult)) + }) + + It("panics when no debug file is given", func() { + // Remove the DEBUG option from CNI_ARGS and regular args + cmd.Env[len(cmd.Env)-1] = "CNI_ARGS=FOO=BAR" + expectedCmdArgs.Args = "FOO=BAR" + + session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter) + Expect(err).NotTo(HaveOccurred()) + Eventually(session).Should(gexec.Exit(2)) + }) + + It("pass previous result through when ReportResult is PASSTHROUGH", func() { + debug = &noop_debug.Debug{ReportResult: "PASSTHROUGH"} + Expect(debug.WriteDebug(debugFileName)).To(Succeed()) + + cmd.Stdin = strings.NewReader(`{ + "some":"stdin-json", + "cniVersion": "0.3.1", + "prevResult": { + "ips": [{"version": "4", "address": "10.1.2.15/24"}] + } +}`) + session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter) + Expect(err).NotTo(HaveOccurred()) + Eventually(session).Should(gexec.Exit(0)) + Expect(session.Out.Contents()).To(MatchJSON(`{"ips": [{"version": "4", "address": "10.1.2.15/24"}], "dns": {}}`)) + }) + + It("injects DNS into previous result when ReportResult is INJECT-DNS", func() { + debug = &noop_debug.Debug{ReportResult: "INJECT-DNS"} + Expect(debug.WriteDebug(debugFileName)).To(Succeed()) + + cmd.Stdin = strings.NewReader(`{ + "some":"stdin-json", + "cniVersion": "0.3.1", + "prevResult": { + "ips": [{"version": "4", "address": "10.1.2.3/24"}], + "dns": {} + } +}`) + + session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter) + Expect(err).NotTo(HaveOccurred()) + Eventually(session).Should(gexec.Exit(0)) + Expect(session.Out.Contents()).To(MatchJSON(`{ + "cniVersion": "0.3.1", + "ips": [{"version": "4", "address": "10.1.2.3/24"}], + "dns": {"nameservers": ["1.2.3.4"]} +}`)) + }) + + It("allows passing debug file in config JSON", func() { + // Remove the DEBUG option from CNI_ARGS and regular args + newArgs := "FOO=BAR" + cmd.Env[len(cmd.Env)-1] = "CNI_ARGS=" + newArgs + newStdin := fmt.Sprintf(`{"some":"stdin-json", "cniVersion": "0.3.1", "debugFile": "%s"}`, debugFileName) + cmd.Stdin = strings.NewReader(newStdin) + expectedCmdArgs.Args = newArgs + expectedCmdArgs.StdinData = []byte(newStdin) + + session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter) + Expect(err).NotTo(HaveOccurred()) + Eventually(session).Should(gexec.Exit(0)) + Expect(session.Out.Contents()).To(MatchJSON(reportResult)) + + debug, err := noop_debug.ReadDebug(debugFileName) + Expect(err).NotTo(HaveOccurred()) + Expect(debug.Command).To(Equal("ADD")) + Expect(debug.CmdArgs).To(Equal(expectedCmdArgs)) + }) + + It("records all the args provided by skel.PluginMain", func() { + session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter) + Expect(err).NotTo(HaveOccurred()) + Eventually(session).Should(gexec.Exit(0)) + + debug, err := noop_debug.ReadDebug(debugFileName) + Expect(err).NotTo(HaveOccurred()) + Expect(debug.Command).To(Equal("ADD")) + Expect(debug.CmdArgs).To(Equal(expectedCmdArgs)) + }) + + Context("when the ReportResult debug field is empty", func() { + BeforeEach(func() { + debug.ReportResult = "" + Expect(debug.WriteDebug(debugFileName)).To(Succeed()) + }) + + It("substitutes a helpful message for the test author", func() { + expectedResultString := fmt.Sprintf(` { "result": %q }`, noop_debug.EmptyReportResultMessage) + + session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter) + Expect(err).NotTo(HaveOccurred()) + Eventually(session).Should(gexec.Exit(0)) + Expect(session.Out.Contents()).To(MatchJSON(expectedResultString)) + + debug, err := noop_debug.ReadDebug(debugFileName) + Expect(err).NotTo(HaveOccurred()) + Expect(debug.ReportResult).To(MatchJSON(expectedResultString)) + }) + }) + + Context("when the ReportError debug field is set", func() { + BeforeEach(func() { + debug.ReportError = "banana" + Expect(debug.WriteDebug(debugFileName)).To(Succeed()) + }) + + It("returns an error to skel.PluginMain, causing the process to exit code 1", func() { + session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter) + Expect(err).NotTo(HaveOccurred()) + Eventually(session).Should(gexec.Exit(1)) + Expect(session.Out.Contents()).To(MatchJSON(`{ "code": 100, "msg": "banana" }`)) + }) + }) + + Context("when the CNI_COMMAND is DEL", func() { + BeforeEach(func() { + cmd.Env[0] = "CNI_COMMAND=DEL" + debug.ReportResult = `{ "some": "delete-data" }` + Expect(debug.WriteDebug(debugFileName)).To(Succeed()) + }) + + It("still does all the debug behavior", func() { + session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter) + Expect(err).NotTo(HaveOccurred()) + Eventually(session).Should(gexec.Exit(0)) + Expect(session.Out.Contents()).To(MatchJSON(`{ + "some": "delete-data" + }`)) + debug, err := noop_debug.ReadDebug(debugFileName) + Expect(err).NotTo(HaveOccurred()) + Expect(debug.Command).To(Equal("DEL")) + Expect(debug.CmdArgs).To(Equal(expectedCmdArgs)) + }) + }) + + Context("when the CNI_COMMAND is VERSION", func() { + BeforeEach(func() { + cmd.Env[0] = "CNI_COMMAND=VERSION" + debug.ReportVersionSupport = []string{"0.123.0", "0.2.0"} + + Expect(debug.WriteDebug(debugFileName)).To(Succeed()) + }) + + It("claims to support the specified versions", func() { + session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter) + Expect(err).NotTo(HaveOccurred()) + Eventually(session).Should(gexec.Exit(0)) + decoder := &version.PluginDecoder{} + pluginInfo, err := decoder.Decode(session.Out.Contents()) + Expect(err).NotTo(HaveOccurred()) + Expect(pluginInfo.SupportedVersions()).To(ConsistOf( + "0.123.0", "0.2.0")) + }) + }) +}) diff --git a/vendor/github.com/containernetworking/cni/scripts/release-with-rkt.sh b/vendor/github.com/containernetworking/cni/scripts/release-with-rkt.sh deleted file mode 100755 index e7cf96f4..00000000 --- a/vendor/github.com/containernetworking/cni/scripts/release-with-rkt.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash -set -xe - -SRC_DIR="${SRC_DIR:-$PWD}" - -FEDORA_INSTALL="dnf install -y golang tar xz bzip2 gzip sudo iproute wget" -FEDORA_IMAGE="docker://fedora:25" -ACBUILD_URL="https://github.com/appc/acbuild/releases/download/v0.2.2/acbuild.tar.gz" -ACBUILD="acbuild --debug" -BUILDFLAGS="-a --ldflags '-extldflags \"-static\"'" - -TAG=$(git describe --exact-match --abbrev=0) || TAG=$(git describe) -RELEASE_DIR=release-${TAG} -OUTPUT_DIR=bin - -rm -Rf ${SRC_DIR}/${RELEASE_DIR} -mkdir -p ${SRC_DIR}/${RELEASE_DIR} - -sudo -E rkt run \ - --volume src-dir,kind=host,source=$SRC_DIR \ - --mount volume=src-dir,target=/opt/src \ - --interactive \ - --insecure-options=image \ - --net=host \ - --dns=host \ - ${FEDORA_IMAGE} \ - --exec /bin/bash \ - -- -xe -c "\ - ${FEDORA_INSTALL}; cd /opt/src; umask 0022; - for arch in amd64 arm arm64 ppc64le s390x; do \ - CGO_ENABLED=0 GOARCH=\$arch ./build.sh ${BUILDFLAGS}; \ - for format in tgz; do \ - FILENAME=cni-\$arch-${TAG}.\$format; \ - FILEPATH=${RELEASE_DIR}/\$FILENAME; \ - tar -C ${OUTPUT_DIR} --owner=0 --group=0 -caf \$FILEPATH .; \ - if [ \"\$arch\" == \"amd64\" ]; then \ - cp \$FILEPATH ${RELEASE_DIR}/cni-${TAG}.\$format; \ - fi; \ - done; \ - done; \ - wget -O - ${ACBUILD_URL} | tar -C /usr/bin -xzvf -; \ - ${ACBUILD} begin; \ - ${ACBUILD} set-name coreos.com/cni; \ - ${ACBUILD} label add version ${TAG}; \ - ${ACBUILD} copy --to-dir ${OUTPUT_DIR} /opt/cni/; \ - ${ACBUILD} write ${RELEASE_DIR}/cni-${TAG}.aci; \ - ${ACBUILD} end; \ - pushd ${RELEASE_DIR}; for f in \$(ls); do sha1sum \$f > \$f.sha1; done; popd; \ - chown -R ${UID} ${OUTPUT_DIR} ${RELEASE_DIR}; \ - :" diff --git a/vendor/github.com/containernetworking/cni/scripts/release.sh b/vendor/github.com/containernetworking/cni/scripts/release.sh new file mode 100755 index 00000000..4e8fe0f8 --- /dev/null +++ b/vendor/github.com/containernetworking/cni/scripts/release.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +set -xe + +SRC_DIR="${SRC_DIR:-$PWD}" +BUILDFLAGS="-a --ldflags '-extldflags \"-static\"'" + +TAG=$(git describe --tags --dirty) +RELEASE_DIR=release-${TAG} + +OUTPUT_DIR=bin + +# Always clean first +rm -Rf ${SRC_DIR}/${RELEASE_DIR} +mkdir -p ${SRC_DIR}/${RELEASE_DIR} + +docker run -i -v ${SRC_DIR}:/opt/src --rm golang:1.8-alpine \ +/bin/sh -xe -c "\ + apk --no-cache add bash tar; + cd /opt/src; umask 0022; + for arch in amd64 arm arm64 ppc64le s390x; do \ + CGO_ENABLED=0 GOARCH=\$arch ./build.sh ${BUILDFLAGS}; \ + for format in tgz; do \ + FILENAME=cni-\$arch-${TAG}.\$format; \ + FILEPATH=${RELEASE_DIR}/\$FILENAME; \ + tar -C ${OUTPUT_DIR} --owner=0 --group=0 -caf \$FILEPATH .; \ + if [ \"\$arch\" == \"amd64\" ]; then \ + cp \$FILEPATH ${RELEASE_DIR}/cni-${TAG}.\$format; \ + fi; \ + done; \ + done; + cd ${RELEASE_DIR}; + for f in *.tgz; do sha1sum \$f > \$f.sha1; done; + for f in *.tgz; do sha256sum \$f > \$f.sha256; done; + for f in *.tgz; do sha512sum \$f > \$f.sha512; done; + cd .. + chown -R ${UID} ${OUTPUT_DIR} ${RELEASE_DIR}" diff --git a/vendor/github.com/containernetworking/cni/test.sh b/vendor/github.com/containernetworking/cni/test.sh index 3da1669d..bcdbd3d5 100755 --- a/vendor/github.com/containernetworking/cni/test.sh +++ b/vendor/github.com/containernetworking/cni/test.sh @@ -5,14 +5,14 @@ # ./test -v # # Run tests for one package -# PKG=./plugins/ipam/dhcp ./test +# PKG=./libcni ./test # set -e source ./build.sh -TESTABLE="libcni plugins/ipam/dhcp plugins/ipam/host-local plugins/ipam/host-local/backend/allocator plugins/main/loopback pkg/invoke pkg/ns pkg/skel pkg/types pkg/types/current pkg/types/020 pkg/utils plugins/main/ipvlan plugins/main/macvlan plugins/main/bridge plugins/main/ptp plugins/test/noop pkg/utils/hwaddr pkg/ip pkg/version pkg/version/testhelpers plugins/meta/flannel pkg/ipam" -FORMATTABLE="$TESTABLE pkg/testutils plugins/meta/flannel plugins/meta/tuning" +TESTABLE="libcni pkg/invoke pkg/skel pkg/types pkg/types/current pkg/types/020 pkg/version pkg/version/testhelpers plugins/test/noop" +FORMATTABLE="$TESTABLE" # user has not provided PKG override if [ -z "$PKG" ]; then diff --git a/vendor/github.com/containernetworking/cni/vendor/github.com/onsi/ginkgo/.gitignore b/vendor/github.com/containernetworking/cni/vendor/github.com/onsi/ginkgo/.gitignore new file mode 100644 index 00000000..922b4f7f --- /dev/null +++ b/vendor/github.com/containernetworking/cni/vendor/github.com/onsi/ginkgo/.gitignore @@ -0,0 +1,4 @@ +.DS_Store +TODO +tmp/**/* +*.coverprofile \ No newline at end of file diff --git a/vendor/github.com/containernetworking/cni/vendor/github.com/onsi/ginkgo/.travis.yml b/vendor/github.com/containernetworking/cni/vendor/github.com/onsi/ginkgo/.travis.yml new file mode 100644 index 00000000..f0e67b84 --- /dev/null +++ b/vendor/github.com/containernetworking/cni/vendor/github.com/onsi/ginkgo/.travis.yml @@ -0,0 +1,15 @@ +language: go +go: + - 1.3 + - 1.4 + - 1.5 + - tip + +install: + - go get -v -t ./... + - go get golang.org/x/tools/cmd/cover + - go get github.com/onsi/gomega + - go install github.com/onsi/ginkgo/ginkgo + - export PATH=$PATH:$HOME/gopath/bin + +script: $HOME/gopath/bin/ginkgo -r --randomizeAllSpecs --randomizeSuites --race --trace diff --git a/vendor/github.com/containernetworking/cni/vendor/github.com/onsi/gomega/.gitignore b/vendor/github.com/containernetworking/cni/vendor/github.com/onsi/gomega/.gitignore new file mode 100644 index 00000000..55145320 --- /dev/null +++ b/vendor/github.com/containernetworking/cni/vendor/github.com/onsi/gomega/.gitignore @@ -0,0 +1,3 @@ +.DS_Store +*.test +. diff --git a/vendor/github.com/containernetworking/cni/vendor/github.com/onsi/gomega/.travis.yml b/vendor/github.com/containernetworking/cni/vendor/github.com/onsi/gomega/.travis.yml new file mode 100644 index 00000000..79780ec5 --- /dev/null +++ b/vendor/github.com/containernetworking/cni/vendor/github.com/onsi/gomega/.travis.yml @@ -0,0 +1,11 @@ +language: go +go: + - 1.4 + - 1.5 + +install: + - go get -v ./... + - go get github.com/onsi/ginkgo + - go install github.com/onsi/ginkgo/ginkgo + +script: $HOME/gopath/bin/ginkgo -r --randomizeAllSpecs --failOnPending --randomizeSuites --race diff --git a/vendor/github.com/containernetworking/plugins/.gitignore b/vendor/github.com/containernetworking/plugins/.gitignore new file mode 100644 index 00000000..b72c2de0 --- /dev/null +++ b/vendor/github.com/containernetworking/plugins/.gitignore @@ -0,0 +1,28 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe +*.test +*.prof + +bin/ +gopath/ +.vagrant diff --git a/vendor/github.com/containernetworking/plugins/.travis.yml b/vendor/github.com/containernetworking/plugins/.travis.yml new file mode 100644 index 00000000..be690569 --- /dev/null +++ b/vendor/github.com/containernetworking/plugins/.travis.yml @@ -0,0 +1,34 @@ +language: go +sudo: required +dist: trusty + +go: + - 1.7.x + - 1.8.x + +env: + global: + - PATH=$GOROOT/bin:$PATH + matrix: + - TARGET=amd64 + - TARGET=arm + - TARGET=arm64 + - TARGET=ppc64le + - TARGET=s390x + +matrix: + fast_finish: true + +script: + - | + if [ "${TARGET}" == "amd64" ]; then + GOARCH="${TARGET}" ./test.sh + else + GOARCH="${TARGET}" ./build.sh + fi + +notifications: + email: false + +git: + depth: 9999999 diff --git a/vendor/github.com/containernetworking/plugins/CONTRIBUTING.md b/vendor/github.com/containernetworking/plugins/CONTRIBUTING.md new file mode 100644 index 00000000..0108d70e --- /dev/null +++ b/vendor/github.com/containernetworking/plugins/CONTRIBUTING.md @@ -0,0 +1,134 @@ +# How to Contribute + +CNI is [Apache 2.0 licensed](LICENSE) and accepts contributions via GitHub +pull requests. This document outlines some of the conventions on development +workflow, commit message formatting, contact points and other resources to make +it easier to get your contribution accepted. + +We gratefully welcome improvements to documentation as well as to code. + +# Certificate of Origin + +By contributing to this project you agree to the Developer Certificate of +Origin (DCO). This document was created by the Linux Kernel community and is a +simple statement that you, as a contributor, have the legal right to make the +contribution. See the [DCO](DCO) file for details. + +# Email and Chat + +The project uses the the cni-dev email list and IRC chat: +- Email: [cni-dev](https://groups.google.com/forum/#!forum/cni-dev) +- IRC: #[containernetworking](irc://irc.freenode.org:6667/#containernetworking) channel on freenode.org + +Please avoid emailing maintainers found in the MAINTAINERS file directly. They +are very busy and read the mailing lists. + +## Getting Started + +- Fork the repository on GitHub +- Read the [README](README.md) for build and test instructions +- Play with the project, submit bugs, submit pull requests! + +## Contribution workflow + +This is a rough outline of how to prepare a contribution: + +- Create a topic branch from where you want to base your work (usually branched from master). +- Make commits of logical units. +- Make sure your commit messages are in the proper format (see below). +- Push your changes to a topic branch in your fork of the repository. +- If you changed code: + - add automated tests to cover your changes, using the [Ginkgo](http://onsi.github.io/ginkgo/) & [Gomega](http://onsi.github.io/gomega/) style + - if the package did not previously have any test coverage, add it to the list + of `TESTABLE` packages in the `test.sh` script. + - run the full test script and ensure it passes +- Make sure any new code files have a license header (this is now enforced by automated tests) +- Submit a pull request to the original repository. + +## How to run the test suite +We generally require test coverage of any new features or bug fixes. + +Here's how you can run the test suite on any system (even Mac or Windows) using + [Vagrant](https://www.vagrantup.com/) and a hypervisor of your choice: + +First, ensure that you have the [CNI repo](https://github.com/containernetworking/cni) and this repo (plugins) cloned side-by-side: +```bash +cd ~/workspace +git clone https://github.com/containernetworking/cni +git clone https://github.com/containernetworking/plugins +``` + +Next, boot the virtual machine and SSH in to run the tests: + +```bash +vagrant up +vagrant ssh +# you're now in a shell in a virtual machine +sudo su +cd /go/src/github.com/containernetworking/plugins + +# to run the full test suite +./test.sh + +# to focus on a particular test suite +cd plugins/main/loopback +go test +``` + +# Acceptance policy + +These things will make a PR more likely to be accepted: + + * a well-described requirement + * tests for new code + * tests for old code! + * new code and tests follow the conventions in old code and tests + * a good commit message (see below) + +In general, we will merge a PR once two maintainers have endorsed it. +Trivial changes (e.g., corrections to spelling) may get waved through. +For substantial changes, more people may become involved, and you might get asked to resubmit the PR or divide the changes into more than one PR. + +### Format of the Commit Message + +We follow a rough convention for commit messages that is designed to answer two +questions: what changed and why. The subject line should feature the what and +the body of the commit should describe the why. + +``` +scripts: add the test-cluster command + +this uses tmux to setup a test cluster that you can easily kill and +start for debugging. + +Fixes #38 +``` + +The format can be described more formally as follows: + +``` +: + + + +