Sign inSign up

xiaopal/npc_setup

By xiaopal

•Updated over 7 years ago

npc_setup

Image
1

3.9K

xiaopal/npc_setup repository overview

⁠蜂巢云主机编排代理

updated 2019-06-10 v0.7.1

⁠云主机负载均衡(NEW)

$ docker run -i --rm \
    -e NPC_API_KEY=<API_KEY> \
    -e NPC_API_SECRET=<API_SECRET> \
    xiaopal/npc_setup npc playbook --setup <<EOF
---
npc_load_balancings:
  - name: lb-test
    vpc: defaultVPCNetwork
    vpc_subnet: default
    vpc_security_group: default
    capacity: 10m
    present: yes
EOF

$ docker run -i --rm \
    -e NPC_API_KEY=<API_KEY> \
    -e NPC_API_SECRET=<API_SECRET> \
    xiaopal/npc_setup npc playbook --setup <<EOF
---
npc_instances:
  - name: test-vm
    zone: cn-east-1b
    instance_type: {series: 2, type: 2, cpu: 4, memory: 8G}
    instance_image: Debian 8.6
    vpc: defaultVPCNetwork
    vpc_subnet: default
    vpc_security_group: default
    vpc_inet: yes
    vpc_inet_capacity: 10m
    ssh_keys:
      - Xiaohui-GRAYPC
    present: yes
npc_load_balancings:
  - name: lb-test
    vpc: defaultVPCNetwork
    vpc_subnet: default
    vpc_security_group: default
    capacity: 10m
    present: yes
    target_groups:
      - target_group: test-target-1
        targets:
          - test-vm/8888
      - target_group: test-target-{2,3}
        absent_targets:
          - test-vm/4444
        present_targets:
          - test-vm/8888
    listeners:
      - listener: test-http/80/http
        rules:
          - path: /
            target_group: test-target-1
      - listener: test-https/443/https
        present_rules:
          - host: www.example.com
            path: /new
            cert: www-example-com
            target_group: test-target-2
        absent_rules:
          - host: www.example.com
            path: /old
            cert: www-example-com
            target_group: test-target-3

EOF

⁠支持新版OpenAPI DNS资源记录集创建(NEW)

$ docker run -i --rm \
    -e NPC_API_KEY=<API_KEY> \
    -e NPC_API_SECRET=<API_SECRET> \
    xiaopal/npc_setup npc playbook -<<EOF
---
- hosts: localhost
  gather_facts: no
  roles:
    - role: xiaopal.npc_setup
      npc_dns_record_sets:
        - record_set: A, test{1..100}.example.com @example.com
          ttl: 3600
          records: 
            - '*:1.1.1.{1..100}'
        - record_set: A, test.example.com @example.com
          absent_records: 
            - 1.1.1.1
          present_records: 
            - 2.2.2.2
        - record_set: CNAME, t{1..100}.example.com, 3600 @example.com
          present_records: 
            - test.example.com
        - record_set: SRV, _t{1..100}._tcp.example.com, 3600 @example.com
          records: 
            - '@:1 0 8888 test{1..100}.example.com'
  tasks:
    - debug: msg={{npc}}
EOF

$ docker run -i --rm \
    -e NPC_API_KEY=<API_KEY> \
    -e NPC_API_SECRET=<API_SECRET> \
    xiaopal/npc_setup npc playbook -<<EOF
---
- hosts: localhost
  gather_facts: no
  roles:
    - role: xiaopal.npc_setup
      npc_dns_zones:
        - name: example.com
          vpc: defaultVPCNetwork
          record_sets:
            - record_set: A, test{1..100}.example.com
              records: 
                - '*:1.1.1.{1..100}'
            - record_set: A, test.example.com
              absent_records: 
                - 1.1.1.1
              present_records: 
                - 2.2.2.2
            - record_set: CNAME, t{1..100}.example.com
              present_records: 
                - test.example.com
            - record_set: SRV, _t{1..100}._tcp.example.com, 60
              records: 
                - '@:1 0 8888 test{1..100}.example.com'
          
  tasks:
    - debug: msg={{npc}}
EOF

⁠新版OpenAPI虚拟机规格及DNS托管域支持 (NEW)

$ docker run -i --rm \
    -e NPC_API_KEY=<API_KEY> \
    -e NPC_API_SECRET=<API_SECRET> \
    xiaopal/npc_setup npc playbook --setup <<\EOF
---
npc_dns_zones:
  - name: in-addr.arpa
    fallthrough: yes
    vpc: defaultVPCNetwork
  - name: example.com
    vpc: defaultVPCNetwork
npc_instances:
  - name: test-vm
    present: no
  - name: test-vm-1
    zone: cn-east-1b
    instance_type: {spec: "nvm.e2.large8"}
    instance_image: Debian 8.6
    vpc: defaultVPCNetwork
    vpc_subnet: default
    vpc_security_group: default
    vpc_inet: yes
    vpc_inet_capacity: 10m
    ssh_keys:
      - Xiaohui-GRAYPC
    present: yes
  - name: test-vm-2
    zone: cn-east-1b
    instance_type: {"cpu":4,"memory":"8G","series":2,"type":2}
    instance_image: Debian 8.6
    vpc: defaultVPCNetwork
    vpc_subnet: default
    vpc_security_group: default
    vpc_inet: yes
    vpc_inet_capacity: 10m
    ssh_keys:
      - Xiaohui-GRAYPC
    present: yes
EOF

⁠新版VPC支持 (NEW)

$ docker run -i --rm \
    -e NPC_API_KEY=<API_KEY> \
    -e NPC_API_SECRET=<API_SECRET> \
    xiaopal/npc_setup npc playbook --setup <<\EOF
---
npc_ssh_key: { name: test-ssh-key }

npc_instances:
  - name: vpc-instance-01
    zone: cn-east-1b
    instance_type: {series: 2, type: 2, cpu: 4, memory: 8G}
    instance_image: Debian 8.6
    vpc: test-vpc
    vpc_subnet: default
    vpc_security_group: test_group
    vpc_inet: yes
    vpc_inet_capacity: 10m
    present: yes

npc_vpc_networks:
  - name: test-vpc
    present: yes
    cidr: 10.177.0.0/16
    subnets:
      - subnet: default/10.177.231.0/24
        zone: cn-east-1b
      - subnet: 10.177.232.0/24
        zone: cn-east-1b
    security_groups:
      - security_group: test_group
        rules:
          - rule: ingress, 0.0.0.0/0, icmp
          - rule: ingress, default, all
          - rule: ingress, 10.0.0.0/8, {icmp,tcp/22,tcp/80,tcp/443,tcp/8000-9000}
          - rule: egress, 10.0.0.1, tcp/80-90
            present: no
      - security_group: unuse_group
        present: no
    route_tables:
      - route_table: '{main_route_table,test_table}'
        routes:
          - route: 192.168.99.0/24
            via_instance: vpc-instance-01
EOF

⁠开始使用

# 在本地运行容器(Ctrl+C 结束)
$ docker run -it --rm \
    -e NPC_API_KEY=<API_KEY> \
    -e NPC_API_SECRET=<API_SECRET> \
    -e GIT_URL=https://github.com/xiaopal/npc-launch-repo.git \
    xiaopal/npc_setup

# 在本地运行容器(运行一次后退出)
$ docker run -it --rm \
    -e NPC_API_KEY=<API_KEY> \
    -e NPC_API_SECRET=<API_SECRET> \
    -e GIT_URL=https://github.com/xiaopal/npc-launch-repo.git \
    -e NPC_SETUP_ONCE=Y \
    xiaopal/npc_setup

# 创建为蜂巢容器服务
$ docker run -i --rm \
    -e NPC_API_KEY=<API_KEY> \
    -e NPC_API_SECRET=<API_SECRET> \
    -e SERVICE_NS=fnd \
    -e SERVICE_NAME=npc-setup \
    xiaopal/npc_setup bash <<\EOF
        NS_ID="$(npc api 'json.namespaces[]|select(.display_name==env.SERVICE_NS)|.id//empty' GET /api/v1/namespaces)"
        [ -z "$NS_ID" ] && NS_ID="$(npc api '.namespace_id//.namespace_Id//empty' POST /api/v1/namespaces "$(jq -nc '{name: env.SERVICE_NS}')")"
        [ ! -z "$NS_ID" ] && npc api POST /api/v1/microservices "$(jq -nc \
            --arg ns "$NS_ID" \
            '{
                bill_info:"default",
                service_info: {
                    service_name: env.SERVICE_NAME, namespace_id: $ns, 
                    port_maps: [{"target_port": "80","port": "80","protocol": "TCP"}],
                    stateful: 1, replicas: 1, spec_alias: "C1M1S20", disk_type: 2, 
                    state_public_net:{used: false, type: "flow", bandwidth: 1}
                },
                service_container_infos: [{
                    image_path: "hub.c.163.com/xiaopal/npc_setup:latest",
                    container_name: env.SERVICE_NAME,
                    envs: ({
                        NPC_API_KEY: env.NPC_API_KEY,
                        NPC_API_SECRET: env.NPC_API_SECRET,
                        GIT_URL: "https://github.com/xiaopal/npc-launch-repo.git",
                        NPC_WEBHOOK: "/webhook/npc-setup",
                        ANSIBLE_SSH_CONTROL_PATH: "/dev/shm/npc-cp-%%h-%%p-%%r"
                    }|to_entries), 
                    log_dirs: [], cpu_weight: 100, memory_weight: 100, local_disk_info: [], volume_info:{}
                }]
            }')"
EOF
$ docker run -i --rm \
    -e NPC_API_KEY=<API_KEY> \
    -e NPC_API_SECRET=<API_SECRET> \
    -e SERVICE_NS=fnd \
    -e SERVICE_NAME=npc-setup-secure \
    xiaopal/npc_setup bash <<\EOF
        NS_ID="$(npc api 'json.namespaces[]|select(.display_name==env.SERVICE_NS)|.id//empty' GET /api/v1/namespaces)"
        [ -z "$NS_ID" ] && NS_ID="$(npc api '.namespace_id//.namespace_Id//empty' POST /api/v1/namespaces "$(jq -nc '{name: env.SERVICE_NS}')")"
        [ ! -z "$NS_ID" ] && npc api POST /api/v1/microservices "$(jq -nc \
            --arg ns "$NS_ID" \
            --arg sec "$(tr -dc 'A-Za-z0-9' </dev/urandom | head -c 16)" \
            '{
                bill_info:"default",
                service_info: {
                    service_name: env.SERVICE_NAME, namespace_id: $ns, 
                    port_maps: [{"target_port": "80","port": "80","protocol": "TCP"}],
                    stateful: 1, replicas: 1, spec_alias: "C1M1S20", disk_type: 2, 
                    state_public_net:{used: false, type: "flow", bandwidth: 1}
                },
                service_container_infos: [{
                    image_path: "hub.c.163.com/xiaopal/npc_setup:latest",
                    container_name: env.SERVICE_NAME,
                    envs: ({
                        NPC_API_KEY: env.NPC_API_KEY,
                        NPC_API_SECRET: env.NPC_API_SECRET,
                        GIT_URL: "https://github.com/xiaopal/npc-launch-repo.git",
                        NPC_WEBHOOK: "/webhook/npc-setup",
                        NPC_WEBHOOK_METHOD: "POST",
                        NPC_WEBHOOK_SECRET: $sec,
                        NPC_WEBHOOK_OPTIONS: "set_real_ip_from 10.0.0.0/8; allow 192.30.252.0/22; allow 185.199.108.0/22; deny all;",
                        ANSIBLE_SSH_CONTROL_PATH: "/dev/shm/npc-cp-%%h-%%p-%%r"
                    }|to_entries), 
                    log_dirs: [], cpu_weight: 100, memory_weight: 100, local_disk_info: [], volume_info:{}
                }]
            }')"
EOF

$ docker run -it --rm \
    -e NPC_API_KEY=<API_KEY> \
    -e NPC_API_SECRET=<API_SECRET> \
    -e NPC_SETUP_ONCE=Y \
    -v $PWD/playbook.yml:/playbooks/playbook.yml \
    xiaopal/npc_setup

$ docker run -i --rm \
    -e NPC_API_KEY=<API_KEY> \
    -e NPC_API_SECRET=<API_SECRET> \
    xiaopal/npc_setup npc playbook - <<\EOF
---
- hosts: localhost
  connection: local
  gather_facts: 'no'
  roles: 
    - role: xiaopal.npc_setup
      npc_config:
        ssh_key: 
          name: ansible
      npc_instances: 
        - name: 'ha-nginx-{a,b}'
          instance_image: Debian 8.6
          instance_type:
            cpu: 1
            memory: 2G 
          groups:
            - nginx
          wan_ip: any
          ssh_host_by: wan_ip
          vars:
            vrrp_priority: '*:{150,100}'
            vrrp_state: '*:{BACKUP,BACKUP}'
            vrrp_vip: '10.173.39.250'
  tasks:
    - wait_for: port=22 host="{{npc.instances[item].wan_ip}}" search_regex=OpenSSH delay=5
      with_inventory_hostnames:
        - nginx
- hosts: nginx
  tasks:
    - apt: name=nginx state=present update_cache=true
    - apt: name=keepalived state=present
    - copy:
        dest: /etc/keepalived/keepalived.conf
        content: |
          vrrp_script check_nginx {
              script "/bin/bash -c 'kill -0 $(</var/run/nginx.pid)'"
              weight -60
              interval 1
              fall 1
              rise 1
          }
          vrrp_instance VI_1 {
              state {{vrrp_state}}
              interface eth0
              virtual_router_id 21
              priority {{vrrp_priority}}
              nopreempt
              advert_int 1
              authentication {
                  auth_type PASS
                  auth_pass Password
              }
              virtual_ipaddress {
                  {{vrrp_vip}}
              }
              track_script {
                check_nginx
              }
          }
    - copy:
        dest: /var/www/html/index.html
        content: |
          <!DOCTYPE html>
          <html>
          <head>
          <title>{{npc_instance.name}}</title>
          </head>
          <body>
          <h1>{{npc_instance.name}} - {{npc_instance.lan_ip}}</h1>
          <pre>{{npc_instance|to_json}}</pre>
          </body>
          </html>
    - service: name=nginx state=restarted
    - service: name=keepalived state=restarted
EOF


$ docker run -i --rm \
    -e NPC_API_KEY=<API_KEY> \
    -e NPC_API_SECRET=<API_SECRET> \
    xiaopal/npc_setup npc playbook --setup <<\EOF
---
npc_instances: 
  - name: 'ha-nginx-{a,b}'
    present: false
EOF




Tag summary

Content type

Image

Digest

Size

39.5 MB

Last updated

over 7 years ago

docker pull xiaopal/npc_setup