| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- // Copyright 2019 Yunion
- //
- // 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 (
- "context"
- "os"
- "os/signal"
- "sync"
- "syscall"
- "yunion.io/x/log"
- api "yunion.io/x/onecloud/pkg/apis/cloudproxy"
- common_app "yunion.io/x/onecloud/pkg/cloudcommon/app"
- common_options "yunion.io/x/onecloud/pkg/cloudcommon/options"
- "yunion.io/x/onecloud/pkg/cloudproxy/agent/worker"
- "yunion.io/x/onecloud/pkg/cloudproxy/options"
- "yunion.io/x/onecloud/pkg/cloudproxy/service"
- "yunion.io/x/onecloud/pkg/util/atexit"
- )
- func main() {
- defer atexit.Handle()
- wg := &sync.WaitGroup{}
- ctx := context.Background()
- ctx = context.WithValue(ctx, "wg", wg)
- ctx, cancelFunc := context.WithCancel(ctx)
- var (
- opts = options.Get()
- )
- common_app.InitAuth(&opts.CommonOptions, func() {
- log.Infof("Auth complete")
- })
- common_options.StartOptionManager(opts, opts.ConfigSyncPeriodSeconds, api.SERVICE_TYPE, api.SERVICE_VERSION, options.OnOptionsChange)
- wg.Add(1)
- go func() {
- defer wg.Done()
- service.StartService()
- }()
- if opts.EnableProxyAgent {
- const d = "10m"
- log.Infof("set proxy_agent_init_wait to %s", d)
- opts.Options.ProxyAgentInitWait = d
- if err := opts.Options.ValidateThenInit(); err != nil {
- log.Fatalf("proxy agent options validation: %v", err)
- }
- worker := worker.NewWorker(&opts.CommonOptions, &opts.Options)
- go func() {
- worker.Start(ctx)
- pid := os.Getpid()
- p, err := os.FindProcess(pid)
- if err != nil {
- log.Fatalf("find process of my pid %d: %v", pid, err)
- }
- p.Signal(syscall.SIGTERM)
- }()
- }
- go func() {
- sigChan := make(chan os.Signal)
- signal.Notify(sigChan, syscall.SIGINT)
- signal.Notify(sigChan, syscall.SIGTERM)
- sig := <-sigChan
- log.Infof("signal received: %s", sig)
- cancelFunc()
- }()
- wg.Wait()
- }
|