zoukankan      html  css  js  c++  java
  • SaltStack配置salt-api第十二篇

    介绍

    SaltStack 官方提供有REST API格式的 salt-api 项目,将使Salt与第三方系统集成变得尤为简单。本文讲带你了解如何安装配置Salt-API, 如何利用Salt-API获取想要的信息

    步骤

    安装

    查看salt-master版本,内核信息及系统版本
    [root@linux-node1 master.d]# rpm -qa |grep salt-master
    salt-master-2015.5.10-2.el7.noarch
    
    [root@linux-node1 master.d]# more /etc/redhat-release 
    CentOS Linux release 7.2.1511 (Core) 
    一,在salt-master上面安装
    [root@linux-node1 ~]# yum -y install salt-api
    二,检查cherry包是否安装
    [root@linux-node1 ~]# rpm -qa |grep  cherry
    python-cherrypy-3.2.2-4.el7.noarch
    三,安装pyOpenSSL包
    [root@linux-node1 ~]# yum list |grep -i pyOpenSSL
    pyOpenSSL.x86_64                         0.13.1-3.el7                   base    
    pyOpenSSL-doc.noarch                     0.13.1-3.el7                   base  
    [root@linux-node1 ~]# yum install pyOpenSSL
    四,自签名证书,生产环境我们可以购买证书
    [root@linux-node1 ~]# salt-call --local tls.create_self_signed_cert  #下面有版本提示 暂时忽略
    [ERROR   ] You should upgrade pyOpenSSL to at least 0.14.1 to enable the use of X509 extensions
    local:
        Created Private Key: "/etc/pki/tls/certs/localhost.key." Created Certificate: "/etc/pki/tls/certs/localhost.crt."
    五,在salt-master上,打开include功能方便管理
    [root@linux-node1 ~]# grep ^default /etc/salt/master 
    default_include: master.d/*.conf
    六,添加api配置到salt-master配置文件
    [root@linux-node1 salt]# mkdir master.d #如果是新版本会自动生成此目录
    [root@linux-node1 salt]# cd master.d/
    [root@linux-node1 master.d]# vim api.conf
    [root@linux-node1 master.d]# cat api.conf 
    rest_cherrypy:
      host: 192.168.56.11
      port: 8000
      ssl_crt: /etc/pki/tls/certs/localhost.crt
      ssl_key: /etc/pki/tls/certs/localhost.key 
    七,创建用户 -M不创建家目录 ,并设置密码
    [root@linux-node1 master.d]# useradd -M -s /sbin/nologin saltapi
    [root@linux-node1 master.d]# echo "saltapi" | passwd saltapi --stdin
    Changing password for user saltapi.
    passwd: all authentication tokens updated successfully.
    八,在salt-master配置文件里添加验证,在include的目录下创建新文件
    [root@linux-node1 master.d]# pwd
    /etc/salt/master.d
    [root@linux-node1 master.d]# vi auth.conf
    [root@linux-node1 master.d]# cat auth.conf 
    external_auth:
      pam:
        saltapi:
          - .*
          - '@wheel'
          - '@runner'
          - '@jobs' 
    九,重启salt-master和启动salt-api
    [root@linux-node1 master.d]# systemctl  restart salt-master
    [root@linux-node1 master.d]# systemctl start salt-api
    十,查看salt-api端口监听
    [root@linux-node1 master.d]# netstat -an |grep 8000
    tcp        0      0 192.168.56.11:8000      0.0.0.0:*               LISTEN     
    tcp        0      0 192.168.56.11:45196     192.168.56.11:8000      TIME_WAIT  
    十一,验证login登陆,获取token字符串
    [root@linux-node1 master.d]# curl -sSk https://192.168.56.11:8000/login 
    >     -H 'Accept: application/x-yaml' 
    >     -d username='saltapi' 
    >     -d password='saltapi' 
    >     -d eauth='pam'
    return:
    - eauth: pam
      expire: 1508781206.155773
      perms:
      - .*
      - '@wheel'
      - '@runner'
      - '@jobs'
      start: 1508738006.155772
      token: 097e62c6b81ad08019905f55799971a146b392a9
      user: saltapi
    十二,通过api执行test.ping测试连通性
    [root@linux-node1 master.d]# curl -sSk https://192.168.56.11:8000 
    >     -H 'Accept: application/x-yaml' 
    >     -H 'X-Auth-Token: 097e62c6b81ad08019905f55799971a146b392a9'
    >     -d client=local 
    >     -d tgt='*' 
    >     -d fun=test.ping
    return:
    - linux-node1.example.com: true
      linux-node2.example.com: true
    十三,执行cmd.run
    [root@linux-node1 master.d]# curl -sSk https://192.168.56.11:8000 
    >     -H 'Accept: application/x-yaml' 
    >     -H 'X-Auth-Token: 097e62c6b81ad08019905f55799971a146b392a9'
    >     -d client=local 
    >     -d tgt='*' 
    >     -d fun='cmd.run' -d arg='date'
    return:
    - linux-node1.example.com: Mon Oct 23 02:00:16 EDT 2017
      linux-node2.example.com: Mon Oct 23 02:00:16 EDT 2017
    十四,执行状态模块
    [root@linux-node1 master.d]# curl -sSk https://192.168.56.11:8000 
    >     -H 'Accept: application/x-yaml' 
    >     -H 'X-Auth-Token: 097e62c6b81ad08019905f55799971a146b392a9'
    >     -d client=local 
    >     -d tgt='*' 
    >     -d fun='state.sls' -d arg='web.lamp'
    return:
    - linux-node1.example.com:
        cmd_|-apache-auth_|-htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin_|-run:
          __run_num__: 6
          changes: {}
          comment: unless execution succeeded
          duration: 5.93
          name: htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin
          result: true
          skip_watch: true
          start_time: '02:03:25.724448'
        file_|-apache-conf_|-/etc/httpd/conf.d_|-recurse:
          __run_num__: 4
          changes: {}
          comment: The directory /etc/httpd/conf.d is in the correct state
          duration: 22.914
          name: /etc/httpd/conf.d
          result: true
          start_time: '02:03:25.698432'
        file_|-apache-config_|-/etc/httpd/conf/httpd.conf_|-managed:
          __run_num__: 1
          changes: {}
          comment: File /etc/httpd/conf/httpd.conf is in the correct state
          duration: 12.031
          name: /etc/httpd/conf/httpd.conf
          result: true
          start_time: '02:03:25.452497'
        file_|-php-config_|-/etc/php.ini_|-managed:
          __run_num__: 2
          changes: {}
          comment: File /etc/php.ini is in the correct state
          duration: 4.087
          name: /etc/php.ini
          result: true
          start_time: '02:03:25.464632'
        pkg_|-apache-auth_|-httpd-tools_|-installed:
          __run_num__: 5
          changes: {}
          comment: Package httpd-tools is already installed.
          duration: 0.661
          name: httpd-tools
          result: true
          start_time: '02:03:25.721441'
        pkg_|-lamp-install_|-lamp-install_|-installed:
          __run_num__: 0
          changes: {}
          comment: All specified packages are already installed.
          duration: 1109.108
          name: php
          result: true
          start_time: '02:03:24.341037'
        service_|-lamp-service_|-httpd_|-running:
          __run_num__: 3
          changes: {}
          comment: Service httpd is already enabled, and is in the desired state
          duration: 228.811
          name: httpd
          result: true
          start_time: '02:03:25.469465'
      linux-node2.example.com:
        cmd_|-apache-auth_|-htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin_|-run:
          __run_num__: 6
          changes: {}
          comment: unless execution succeeded
          duration: 7.081
          name: htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin
          result: true
          skip_watch: true
          start_time: '02:03:25.790118'
        file_|-apache-conf_|-/etc/httpd/conf.d_|-recurse:
          __run_num__: 4
          changes: {}
          comment: The directory /etc/httpd/conf.d is in the correct state
          duration: 25.616
          name: /etc/httpd/conf.d
          result: true
          start_time: '02:03:25.762374'
        file_|-apache-config_|-/etc/httpd/conf/httpd.conf_|-managed:
          __run_num__: 1
          changes: {}
          comment: File /etc/httpd/conf/httpd.conf is in the correct state
          duration: 21.026
          name: /etc/httpd/conf/httpd.conf
          result: true
          start_time: '02:03:25.489748'
        file_|-php-config_|-/etc/php.ini_|-managed:
          __run_num__: 2
          changes: {}
          comment: File /etc/php.ini is in the correct state
          duration: 5.21
          name: /etc/php.ini
          result: true
          start_time: '02:03:25.510932'
        pkg_|-apache-auth_|-httpd-tools_|-installed:
          __run_num__: 5
          changes: {}
          comment: Package httpd-tools is already installed.
          duration: 0.469
          name: httpd-tools
          result: true
          start_time: '02:03:25.788164'
        pkg_|-lamp-install_|-lamp-install_|-installed:
          __run_num__: 0
          changes: {}
          comment: All specified packages are already installed.
          duration: 813.972
          name: php
          result: true
          start_time: '02:03:24.672610'
        service_|-lamp-service_|-httpd_|-running:
          __run_num__: 3
          changes: {}
          comment: Service httpd is already enabled, and is in the desired state
          duration: 245.069
          name: httpd
          result: true
          start_time: '02:03:25.517134'
    View Code
    十五,以json格式输出
    [root@linux-node1 master.d]# curl -sSk https://192.168.56.11:8000 
    >     -H 'Accept: application/json' 
    >     -H 'X-Auth-Token: 097e62c6b81ad08019905f55799971a146b392a9'
    >     -d client=local 
    >     -d tgt='*' 
    >     -d fun='cmd.run' -d arg='w'
    {"return": [{"linux-node1.example.com": " 02:06:05 up 20:29,  1 user,  load average: 0.00, 0.03, 0.05
    USER     TTY      FROM   LOGIN@   IDLE   JCPU   PCPU WHAT
    root  pts/0 
    192.168.56.1 21:41 5.00s 2.75s 0.10s curl -sSk https://192.168.56.11:8000 -H Accept: application/json
    -H X-Auth-Token: 097e62c6b81ad08019905f55799971a146b392a9 -d client=local -d tgt=* -d fun=cmd.run -d arg=w
    ", "linux-node2.example.com": " 02:06:06 up 20:29,
    0 users, load average: 0.02, 0.02, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
    "}]}
    十六,获取grains信息
    [root@linux-node1 master.d]# curl -sSk https://192.168.56.11:8000/minions/linux-node1.example.com 
    >     -H 'Accept: application/x-yaml' 
    >     -H 'X-Auth-Token: bfd71d03c3c933ae3ae496d27fb3a131a748723e'
    return:
    - linux-node1.example.com:
        SSDs: []
        biosreleasedate: 07/02/2015
        biosversion: '6.00'
        cpu_flags:
        - fpu
        - vme
        - de
        - pse
        - tsc
        - msr
        - pae
        - mce
        - cx8
        - apic
        - sep
        - mtrr
        - pge
        - mca
        - cmov
        - pat
        - pse36
        - clflush
        - dts
        - mmx
        - fxsr
        - sse
        - sse2
        - ss
        - ht
        - syscall
        - nx
        - pdpe1gb
        - rdtscp
        - lm
        - constant_tsc
        - arch_perfmon
        - pebs
        - bts
        - nopl
        - xtopology
        - tsc_reliable
        - nonstop_tsc
        - aperfmperf
        - eagerfpu
        - pni
        - pclmulqdq
        - ssse3
        - fma
        - cx16
        - pcid
        - sse4_1
        - sse4_2
        - x2apic
        - movbe
        - popcnt
        - tsc_deadline_timer
        - aes
        - xsave
        - avx
        - f16c
        - rdrand
        - hypervisor
        - lahf_lm
        - abm
        - 3dnowprefetch
        - ida
        - arat
        - epb
        - pln
        - pts
        - dtherm
        - hwp
        - hwp_noitfy
        - hwp_act_window
        - hwp_epp
        - fsgsbase
        - tsc_adjust
        - bmi1
        - avx2
        - smep
        - bmi2
        - invpcid
        - rdseed
        - adx
        - smap
        - xsaveopt
        - xsavec
        - xgetbv1
        - xsaves
        cpu_model: Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz
        cpuarch: x86_64
        domain: example.com
        fqdn: linux-node1.example.com
        fqdn_ip4:
        - 192.168.56.11
        fqdn_ip6: []
        gpus:
        - model: SVGA II Adapter
          vendor: unknown
        host: linux-node1
        hwaddr_interfaces:
          eth0: 00:0c:29:3c:56:22
          lo: 00:00:00:00:00:00
        id: linux-node1.example.com
        init: systemd
        ip4_interfaces:
          eth0:
          - 192.168.56.11
          lo:
          - 127.0.0.1
        ip6_interfaces:
          eth0:
          - fe80::20c:29ff:fe3c:5622
          lo:
          - ::1
        ip_interfaces:
          eth0:
          - 192.168.56.11
          - fe80::20c:29ff:fe3c:5622
          lo:
          - 127.0.0.1
          - ::1
        ipv4:
        - 127.0.0.1
        - 192.168.56.11
        ipv6:
        - ::1
        - fe80::20c:29ff:fe3c:5622
        kernel: Linux
        kernelrelease: 3.10.0-327.28.2.el7.x86_64
        locale_info:
          defaultencoding: UTF-8
          defaultlanguage: en_US
          detectedencoding: UTF-8
        localhost: linux-node1
        lsb_distrib_id: CentOS Linux
        machine_id: 14e217a8e7d7475391d62b10129baa2f
        manufacturer: VMware, Inc.
        master: 192.168.56.11
        mdadm: []
        mem_total: 1823
        nodename: linux-node1
        num_cpus: 2
        num_gpus: 1
        os: CentOS
        os_family: RedHat
        osarch: x86_64
        oscodename: Core
        osfinger: CentOS Linux-7
        osfullname: CentOS Linux
        osmajorrelease: '7'
        osrelease: 7.2.1511
        osrelease_info:
        - 7
        - 2
        - 1511
        path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
        productname: VMware Virtual Platform
        ps: ps -efH
        pythonexecutable: /usr/bin/python
        pythonpath:
        - /usr/bin
        - /usr/lib64/python27.zip
        - /usr/lib64/python2.7
        - /usr/lib64/python2.7/plat-linux2
        - /usr/lib64/python2.7/lib-tk
        - /usr/lib64/python2.7/lib-old
        - /usr/lib64/python2.7/lib-dynload
        - /usr/lib64/python2.7/site-packages
        - /usr/lib/python2.7/site-packages
        pythonversion:
        - 2
        - 7
        - 5
        - final
        - 0
        saltpath: /usr/lib/python2.7/site-packages/salt
        saltversion: 2015.5.10
        saltversioninfo:
        - 2015
        - 5
        - 10
        - 0
        selinux:
          enabled: false
          enforced: Disabled
        serialnumber: VMware-56 4d 7e 77 4c 73 98 a3-29 27 54 e4 0f 3c 56 22
        server_id: 1981947194
        shell: /bin/sh
        systemd:
          features: +PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP
            +GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
          version: '219'
        virtual: VMware
        zmqversion: 3.2.5
    View Code

    总结

    1.salt-api必须使用https,生产环境建议使用可信证书

    2.当salt-api服务重启后原token失效


     附 英文文档一份

    https://www.unixhot.com/docs/saltstack/ref/netapi/all/salt.netapi.rest_cherrypy.html#a-rest-api-for-salt

  • 相关阅读:
    用python自定义实现db2的连接池
    python写的爬虫工具,抓取行政村的信息并写入到hbase里
    201521123119《Java程序设计》第4周学习总结
    201521123119《Java程序设计》第5周学习总结
    201521123119《Java程序设计》第6周学习总结
    201521123119《Java程序设计》第1周学习总结
    log4j:WARN No appenders could be found for logger
    android 单元测试
    android手机屏幕适配2
    android手机屏幕适配
  • 原文地址:https://www.cnblogs.com/xiewenming/p/7716660.html
Copyright © 2011-2022 走看看