SaltStack 3000 Release Notes - Codename Neon 新版本功能特性说明

SaltStack官方于2020.2月初发布了最新的功能版本——Salt 3000,代号 Neon。相对而言,本次发布的版本,在主要功能上的变化并不算大,具体有哪些增、删、改的变更,请大家详见下文的展开说明。

您也可以参考在Github上维护的一份相同的技术资料:Salt 3000 Release Notes - Codename Neon

Security Advisory - 安全建议

由于历史原因,Salt要求PyCrypto作为“lowest common denominator”(需要符合的最低要求)。 但是,PyCrypto并没有得到持续维护,最佳实践是手动升级以使用维护程度更高的库,例如PyCryptodome。 有关更多信息,请参见问题#52674和问题#54115

New Versioning - 新的版本号形式

Neon发行版已删除了日期形式的版本控制。 展望未来,我们将使用从3000开始的基于非日期的版本架构。版本将为MAJOR.PATCH。 对于包含功能和/或错误修复的计划发行版,MAJOR版本将增加。 请查看批准的 SEP 以获取更多详细信息。

新版本控制方案符合PEP 440,但distutils.StrictVersion将导致错误的无效版本号。 如果使用StrictVersion比较Salt的版本,请使用LooseVersion。 您还可以使用打包库来比较版本。 另一种选择是使用 salt version module

Python 3.8 Not Supported

请注意,当前不支持使用Python 3.8运行Salt。 建议不要使用高于3.7的版本。

Vendored Tornado Code Base

Tornado代码库已包含在salt.ext.tornado中。 这样做是为了在所有操作系统上提供一致的Tornado版本,同时我们继续致力于将Tornado升级到最新版本。 使用Tornado的新代码应从salt.ext.tornado导入模块,而不是导入Tornado的系统版本。

Msgpack 1.0.0rc1 Incompatibility

Salt目前与msgpack 1.0.0rc1不兼容。 我们建议使用版本<1.0.0。 这会影响Salt Master对minions运行命令的能力。 有关更多详细信息和更新,请参见问题56007

Pip Installing Salt On Windows

使用pip安装salt时,此版本无法在Windows上正确安装。 PR 56099中解决了此问题。此问题的解决方法是:

pip install "pywin32==224" "WMI==1.4.9"

那些使用Salt Windows Installer的用户不受此问题的影响。

Saltcheck Updates

该模块自 2018.3 发行版中开始提供, 在本次发布版本中 saltcheck 模块在以下方面得到了加强:

  • 支持Saltenv环境
  • 通过命名约定将tests测试与states状态相关联
  • 添加report_highstate_tests函数
  • 添加空和非空断言
  • 添加skip关键字
  • 添加print_result关键字
  • 添加assertion_section关键字
  • 使用saltcheck.state_apply运行state.apply进行测试设置或拆卸
  • 更改输出以显示测试时间
  • 适用于salt-ssh

Saltcheck提供了类似于单元测试的功能,仅需要有关Salt模块执行和Yaml的知识。 Saltcheck使用Salt模块返回数据,然后针对该返回运行断言。 这允许使用salt模块中包含的所有功能进行测试。

为了运行状态和highstate状态saltcheck测试,必须在状态目录中创建一个子文件夹并将其命名为saltcheck-tests。 状态测试应在*.tst结尾的文件中创建,并将其放置在saltcheck-tests文件夹中。 tst文件通过salt渲染系统运行,从而使测试可以用yaml(或选择的渲染器)编写,并包括jinja以及常规的grain和pillar信息。 像状态一样,可以在一个tst文件中指定多个测试。 可以在saltcheck-tests文件夹中创建多个tst文件,并且应将其命名为与关联状态相同的名称。 测试的id与salt状态文件中的id相同,并且应唯一且具有描述性。

Usage

文件在系统中分布的示例::

/srv/salt/apache/
    init.sls
    config.sls
    saltcheck-tests/
        init.tst
        config.tst
        deployment_validation.tst

可以按state状态的name名称运行测试,如运行所有的apache/saltcheck/*.tst测试文件或在top.sls中为分配给该minion的所有状态运行测试。 也可以在没有关联状态的情况下创建测试。 这些测试将通过使用saltcheck.run_state_tests来运行,并不会由saltcheck.run_highstate_tests自动运行。

salt '*' saltcheck.run_state_tests apache,apache.config
salt '*' saltcheck.run_state_tests apache check_all=True
salt '*' saltcheck.run_highstate_tests
salt '*' saltcheck.run_state_tests apache.deployment_validation

Example Tests

{# will run the common salt state before further testing #}
setup_test_environment:
  module_and_function: saltcheck.state_apply
  args:
    - common
  pillar-data:
    data: value

{% for package in ["apache2", "openssh"] %}
{# or another example #}
{# for package in salt['pillar.get']("packages") #}
jinja_test_{{ package }}_latest:
  module_and_function: pkg.upgrade_available
  args:
    - {{ package }}
  assertion: assertFalse
{% endfor %}

validate_user_present_and_shell:
  module_and_function: user.info
  args:
    - root
  assertion: assertEqual
  expected-return: /bin/bash
  assertion_section: shell
  print_result: False

skip_test:
  module_and_function: pkg.upgrade_available
  args:
    - apache2
  assertion: assertFalse
  skip: True

Output Format Changes

Saltcheck输出已得到增强,可以显示每次测试所花费的时间。 这将导致输出格式的更改。

先前的输出:

local:
  |_
    ----------
    ntp:
        ----------
        ntp-client-installed:
            Pass
        ntp-service-status:
            Pass
  |_
    ----------
    TEST RESULTS:
        ----------
        Failed:
            0
        Missing Tests:
            0
        Passed:
            2

New output:

local:
  |_
    ----------
    ntp:
        ----------
        ntp-client-installed:
            ----------
            duration:
                1.0408
            status:
                Pass
        ntp-service-status:
            ----------
            duration:
                1.464
            status:
                Pass
  |_
    ----------
    TEST RESULTS:
        ----------
        Execution Time:
            2.5048
        Failed:
            0
        Missing Tests:
            0
        Passed:
            2
        Skipped:
            0

Unless and onlyif Enhancements

现在,可以使用salt模块运行unlessonlyif条件。 字典必须包含一个参数fun,它是正在运行的模块,其他所有参数都必须在args键下传递,或作为单独的kwargs传递给模块函数。

注意

某些states的unless/onlyif实现早于此功能,可能无法按预期工作:

  • states.git

  • states.cmd

  • states.macpackage

  • states.file

  • states.docker_container

例如:

check external ip address:
  http.query:
    - name: https://icanhazip.com
    - status: 200
    - onlyif:
      - fun: file.file_exists
        path: /usr/local/bin/whatever

等效于:

check another ip address:
  http.query:
    - name: https://icanhazip.com
    - status: 200
    - onlyif:
      - test -f /tmp/fnord.txt

另一个例子:

set mysql root password:
  debconf.set:
    - name: mysql-server-5.7
    - data:
        'mysql-server/root_password': {'type': 'password', 'value': {{pillar['mysql.pass']}} }
    - unless:
      - fun: pkg.version
        args:
          - mysql-server-5.7

Keystore State and Module

现在提供了一个用于管理Java Keystore文件的新的stateexecution 模块。 它允许添加/删除/列出以及管理keystore密钥库文件。

# salt-call keystore.list /path/to/keystore.jks changeit
local:
  |_
    ----------
    alias:
        hostname1
    expired:
        True
    sha1:
        CB:5E:DE:50:57:99:51:87:8E:2E:67:13:C5:3B:E9:38:EB:23:7E:40
    type:
        TrustedCertEntry
    valid_start:
        August 22 2012
    valid_until:
        August 21 2017
define_keystore:
  keystore.managed:
    - name: /tmp/statestore.jks
    - passphrase: changeit
    - force_remove: True
    - entries:
      - alias: hostname1
        certificate: /tmp/testcert.crt
      - alias: remotehost
        certificate: /tmp/512.cert
        private_key: /tmp/512.key
      - alias: stringhost
        certificate: |
          -----BEGIN CERTIFICATE-----
          MIICEjCCAX
          Hn+GmxZA
          -----END CERTIFICATE-----

XML Module

现在提供一个用于编辑XML文件的新状态和执行模块。 当前,它允许编辑来自xpath查询的值或编辑XML ID。

# salt-call xml.set_attribute /tmp/test.xml ".//actor[@id='3']" editedby "Jane Doe"
local:
    True
# salt-call xml.get_attribute /tmp/test.xml ".//actor[@id='3']"
local:
    ----------
    editedby:
        Jane Doe
    id:
        3
# salt-call xml.get_value /tmp/test.xml ".//actor[@id='2']"
local:
    Liam Neeson
# salt-call xml.set_value /tmp/test.xml ".//actor[@id='2']" "Patrick Stewart"
local:
    True
# salt-call xml.get_value /tmp/test.xml ".//actor[@id='2']"
local:
    Patrick Stewart
ensure_value_true:
  xml.value_present:
    - name: /tmp/test.xml
    - xpath: .//actor[@id='1']
    - value: William Shatner

LGPO Execution Module

win_lgpo进行了多项修复,以扩展对其他策略的支持并提高性能。 已经解决了在ADML文件中发现的编码和不支持的字符(智能引号、破折号等)以及某些策略中的空格的问题。

速度增强包括:

  • __context__中从ADMX/ADML文件缓存已编译的xml
  • 在编译XML之前请对所有键进行小写,以移除代价昂贵的XPath查找

附加功能:

  • 添加lgpo.get_policy函数,该函数可让您获取单个策略的当前设置。
  • 更改一些过长的策略名称

LGPO State Module

win_lgpo状态进行了多次更改以提高性能。

现在,它使用lgpo.get_policy函数而不是lgpo.get,以避免在每次状态运行的开始和结束时重新加载计算机上的所有设置。

支持新的较短的策略名称,但也尝试解析较旧的较长的策略名称。

Win_network Salt Util

现在使用.NET库在支持Windows的Windows系统上获取接口信息。 不支持的系统会退回到更昂贵的WMI调用。 这一点很重要,因为此数据是针对grains收集的,并且在每次处理fork分叉时都会发生。

Jinja enhancements

Troubleshooting Jinja map files

map.jinja添加了一个新的故障排除 execution module

假设按如下方式将map加载到公式SLS中:

{% from "myformula/map.jinja" import myformula with context %}

以下命令可以用来加载 map 并检查结果:

salt myminion jinja.load_map myformula/map.jinja myformula

这个模块也可以拿来测试 json 和 yaml maps:

salt myminion jinja.import_yaml myformula/defaults.yaml

salt myminion jinja.import_json myformula/defaults.json

json_query filter

已添加Ansible json_query Jinja过滤器的端口。 它允许使用JMESPath语言针对JSON数据进行查询。 可以用于过滤pillar数据、yaml映射,也可以用于http_query

取决于jmespath Python模块。

Slot Syntax Updates

插槽语法已更新,以支持解析字典响应并添加文本。

demo dict parsing and append:
  test.configurable_test_state:
    - name: slot example
    - changes: False
    - comment: __slot__:salt:test.arg(shell="/bin/bash").kwargs.shell ~ /appended
local:
  ----------
        ID: demo dict parsing and append
  Function: test.configurable_test_state
      Name: slot example
    Result: True
   Comment: /bin/bash/appended
   Started: 09:59:58.623575
  Duration: 1.229 ms
   Changes:

此外,现在在嵌套状态数据结构(字典、列表、除非/仅当参数)中支持插槽解析:

demo slot parsing for nested elements:
  file.managed:
    - name: /tmp/slot.txt
    - source: salt://slot.j2
    - template: jinja
    - context:
        # Slot inside of the nested context dictionary
        variable: __slot__:salt:test.echo(a_value)
    - unless:
      - fun: file.search
        args:
          # Slot as unless argument
          - __slot__:salt:test.echo(/tmp/slot.txt)
          - "DO NOT OVERRIDE"
        ignore_if_missing: True

State Changes

  • 修复了file.symlink状态,以正确除去文件、目录和符号链接以外的现有文件系统条目。
  • 由于删除了pchanges,因此onchangesprereqrequisites条件现在在测试模式下可以正常运行。
  • 添加了新的ssh_auth.manage状态,以确保仅对指定用户提供指定的ssh密钥。
  • 添加了新的saltutil状态,而不是使用module.run来更轻松地处理更改。

Module Changes

  • 添加了新的boto_ssm模块以设置和查询AWS SSM参数中的secrets。
  • 修复了file.remove模块,以正确除去文件系统、目录和符号链接以外的文件系统条目。

Enhancements to Engines

可以通过在引擎配置中包括engine_module参数来配置特定Salt引擎的多个副本。

engines:
  - production_logstash:
      host: production_log.my_network.com
      port: 5959
      proto: tcp
      engine_module: logstash
  - develop_logstash:
      host: develop_log.my_network.com
      port: 5959
      proto: tcp
      engine_module: logstash

已添加新的fluent引擎,以将Salt事件导出到fluentd中。

    engines:
      - fluent
          host: localhost
          port: 24224
    <source>
      @type forward
      port 24224
    </source>
    <match saltstack.**>
      @type file
      path /var/log/td-agent/saltstack
    </match>

Enhancements to Beacons

可以通过在信标配置中包含beacon_module参数来配置特定Salt信标的多个副本。

    beacons:
      watch_importand_file:
        - files:
            /etc/important_file: {}
        - beacon_module: inotify
      watch_another_file:
        - files:
            /etc/another_file: {}
        - beacon_module: inotify

Enhancements to chroot

添加到chroot的新功能函数applyslshighstate允许在sls文件中执行状态或在chroot内部运行apply/highstate。

Deprecations

Raet Deprecated

Raet传输工具已被弃用。 请使用支持的传输协议tcp或zeromq。

Module Deprecations

  • 由于服务已停用,Hipchat模块已被删除。 Google Chat,MS Teams或Slack可能是合适的替代品。
  • dockermod模块已作如下更改:
    • dockermod.resolve_tag函数中删除了对标签tags kwarg参数的支持。
    • 已从dockermod.connect_container_to_network函数中删除了对network_id kwarg的支持。 请改用net_id
    • dockermod.sls_build函数中删除了对name kwarg的支持。 请改用repositorytag
    • 从以下功能中删除了对image kwarg的支持。 在所有情况下,请同时使用repositorytag选项:
      • dockermod.build
      • dockermod.commit
      • dockermod.import
      • dockermod.load
      • dockermod.tag
  • 由于拼写错误,heat模块已从heat.create_stackheat.update_stack函数中删除了enviroment kwarg。 请改为使用environment
  • ssh执行模块已作如下更改:
    • 删除了对ssh.get_known_host函数的支持。 请改用ssh.get_known_host_entries函数。
    • 删除了对ssh.recv_known_host函数的支持。 请改用ssh.recv_known_host_entries函数。
  • The :py:modfirewalld <salt.modules.firewalld> module 有以下变更:
    • firewalld.add_port <salt.module.firewalld.add_port()函数中force_masquerade选项的默认设置已从True更改为False
    • firewalld.add_port_fwd <salt.module.firewalld.add_port_fwd()函数中对force_masquerade选项的支持已从True更改为False
  • State Deprecations
    • 由于服务已停用,因此hipchat状态已被删除。 MS TeamsSlack可能是合适的替代品。
    • cmd状态模块已从cmd.run函数中删除了quiet的kwarg。 请改为将output_loglevel设置为quiet
    • 由于拼写错误,heat状态模块已从heat.deployed功能中删除了enviroment。 请改为使用environment
    • :py:modfirewalld <salt.states.firewalld>状态已更改如下:
      • firewalld.present函数中prune_services选项的默认设置已从True更改为False
  • Fileserver Deprecations
    • hgfs文件服务器删除了以下配置选项:
      • hgfs_env_whitelist配置选项已被删除,以支持hgfs_saltenv_whitelist
      • hgfs_env_blacklist配置选项已删除,以支持hgfs_saltenv_blacklist
    • svnfs文件服务器删除了以下配置选项:
      • svnfs_env_whitelist配置选项已被删除,以支持svnfs_saltenv_whitelist
      • svnfs_env_blacklist配置选项已删除,以支持svnfs_saltenv_blacklist
    • gitfs文件服务器删除了以下配置选项:
      • gitfs_env_whitelist配置选项已删除,取而代之的是gitfs_saltenv_whitelist
      • gitfs_env_blacklist配置选项已被删除,以支持gitfs_saltenv_blacklist

Engine Removal

由于服务已停用,Hipchat引擎已被删除。 对于迁移到Slack的用户,Slack引擎可能是合适的替代者。

Returner Removal

由于退役该服务,该hipchat returner已被移除。 对于迁移到Slack的用户,Slack Returner可能是合适的替代者。

Grain Deprecations

对于smartos,已经淘汰了一些grains。 这些grains已被去除。

  • hypervisor_uuid已替换为mdata:sdc:server_uuid grain。
  • datacenter已替换为mdata:sdc:datacenter_name grain。

Cloud Deprecations

nova云驱动程序已被删除,以支持openstack云驱动程序。

Jinja Filter Deprecations

以下jinja过滤器设置为在Aluminum版本中删除:

  • json_decode_dict将替换为tojson
  • [json_decode_list](https://docs.saltstack.com/en/latest/topics/jinja/index.html#std:jinja_ref-json_decode_list替换为tojson

Utils Deprecations

salt.utils.__init__.py中的所有功能均已删除。 这些包括:

  • salt.utils.option
  • salt.utils.required_module_list
  • salt.utils.required_modules_error
  • salt.utils.get_accumulator_dir. Please use salt.state.get_accumulator_dir() instead.
  • salt.utils.fnmatch_multiple. Please use salt.utils.itertools.fnmatch_multiple() instead.
  • salt.utils.appendproctitle. Please use salt.utils.process.appendproctitle() instead.
  • salt.utils.daemonize. Please use salt.utils.process.daemonize() instead.
  • salt.utils.daemonize_if. Please use salt.utils.process.daemonize_if() instead.
  • salt.utils.reinit_crypto. Please use salt.utils.crypt.reinit_crypto() instead.
  • salt.utils.pem_finger. Please use salt.utils.crypt.pem_finger() instead.
  • salt.utils.to_bytes. Please use salt.utils.stringutils.to_bytes() instead.
  • salt.utils.to_str. Please use salt.utils.stringutils.to_str() instead.
  • salt.utils.to_unicode. Please use salt.utils.stringutils.to_unicode() instead.
  • salt.utils.str_to_num. Please use salt.utils.stringutils.to_num() instead.
  • salt.utils.is_quoted. Please use salt.utils.stringutils.is_quoted() instead.
  • salt.utils.dequote. Please use salt.utils.stringutils.dequote() instead.
  • salt.utils.is_hex. Please use salt.utils.stringutils.is_hex() instead.
  • salt.utils.is_bin_str. Please use salt.utils.stringutils.is_binary() instead.
  • salt.utils.rand_string. Please use salt.utils.stringutils.random() instead.
  • salt.utils.contains_whitespace. Please use salt.utils.stringutils.contains_whitespace() instead.
  • salt.utils.build_whitespace_split_regex. Please use salt.utils.stringutils.build_whitespace_split_regex() instead.
  • salt.utils.expr_match. Please use salt.utils.stringutils.expr_match() instead.
  • salt.utils.check_whitelist_blacklist. Please use salt.utils.stringutils.check_whitelist_blacklist() instead.
  • salt.utils.check_include_exclude.Please use salt.utils.stringutils.check_include_exclude() instead.
  • salt.utils.print_cli.Please use salt.utils.stringutils.print_cli() instead.
  • salt.utils.clean_kwargs.Please use salt.utils.args.clean_kwargs() instead.
  • salt.utils.invalid_kwargs.Please use salt.utils.args.invalid_kwargs() instead.
  • salt.utils.shlex_split.Please use salt.utils.args.shlex_split() instead.
  • salt.utils.arg_lookup.Please use salt.utils.args.arg_lookup() instead.
  • salt.utils.argspec_report.Please use salt.utils.args.argspec_report() instead.
  • salt.utils.split_input.Please use salt.utils.args.split_input() instead.
  • salt.utils.test_mode.Please use salt.utils.args.test_mode() instead.
  • salt.utils.format_call.Please use salt.utils.args.format_call() instead.
  • salt.utils.which.Please use salt.utils.path.which() instead.
  • salt.utils.which_bin.Please use salt.utils.path.which_bin() instead.
  • salt.utils.path_join.Please use salt.utils.path.join() instead.
  • salt.utils.check_or_die.Please use salt.utils.path.check_or_die() instead.
  • salt.utils.sanitize_win_path_string.Please use salt.utils.path.sanitize_win_path() instead.
  • salt.utils.rand_str.Please use salt.utils.hashutils.random_hash() instead.
  • salt.utils.get_hash.Please use salt.utils.hashutils.get_hash() instead.
  • salt.utils.is_windows.Please use salt.utils.platform.is_windows() instead.
  • salt.utils.is_proxy.Please use salt.utils.platform.is_proxy() instead.
  • salt.utils.is_linux.Please use salt.utils.platform.is_linux() instead.
  • salt.utils.is_darwin.Please use salt.utils.platform.is_darwin() instead.
  • salt.utils.is_sunos.Please use salt.utils.platform.is_sunos() instead.
  • salt.utils.is_smartos.Please use salt.utils.platform.is_smartos() instead.
  • salt.utils.is_smartos_globalzone.Please use salt.utils.platform.is_smartos_globalzone() instead.
  • salt.utils.is_smartos_zone.Please use salt.utils.platform.is_smartos_zone() instead.
  • salt.utils.is_freebsd.Please use salt.utils.platform.is_freebsd() instead.
  • salt.utils.is_netbsd.Please use salt.utils.platform.is_netbsd() instead.
  • salt.utils.is_openbsd.Please use salt.utils.platform.is_openbsd() instead.
  • salt.utils.is_aix.Please use salt.utils.platform.is_aix() instead.
  • salt.utils.safe_rm.Please use salt.utils.files.safe_rm() instead.
  • salt.utils.is_empty.Please use salt.utils.files.is_empty() instead.
  • salt.utils.fopen.Please use salt.utils.files.fopen() instead.
  • salt.utils.flopen.Please use salt.utils.files.flopen() instead.
  • salt.utils.fpopen.Please use salt.utils.files.fpopen() instead.
  • salt.utils.rm_rf.Please use salt.utils.files.rm_rf() instead.
  • salt.utils.mkstemp.Please use salt.utils.files.mkstemp() instead.
  • salt.utils.istextfile.Please use salt.utils.files.is_text_file() instead.
  • salt.utils.is_bin_file.Please use salt.utils.files.is_binary() instead.
  • salt.utils.list_files.Please use salt.utils.files.list_files() instead.
  • salt.utils.safe_walk.Please use salt.utils.files.safe_walk() instead.
  • salt.utils.st_mode_to_octal.Please use salt.utils.files.st_mode_to_octal() instead.
  • salt.utils.normalize_mode.Please use salt.utils.files.normalize_mode() instead.
  • salt.utils.human_size_to_bytes.Please use salt.utils.files.human_size_to_bytes() instead.
  • salt.utils.backup_minion.Please use salt.utils.files.backup_minion() instead.
  • salt.utils.str_version_to_evr.Please use salt.utils.pkg.rpm.version_to_evr() instead.
  • salt.utils.parse_docstring.Please use salt.utils.doc.parse_docstring() instead.
  • salt.utils.compare_versions.Please use salt.utils.versions.compare() instead.
  • salt.utils.version_cmp.Please use salt.utils.versions.version_cmp() instead.
  • salt.utils.warn_until.Please use salt.utils.versions.warn_until() instead.
  • salt.utils.kwargs_warn_until.Please use salt.utils.versions.kwargs_warn_until() instead.
  • salt.utils.get_color_theme.Please use salt.utils.color.get_color_theme() instead.
  • salt.utils.get_colors.Please use salt.utils.color.get_colors() instead.
  • salt.utils.gen_state_tag.Please use salt.utils.state.gen_tag() instead.
  • salt.utils.search_onfail_requisites.Please use salt.utils.state.search_onfail_requisites() instead.
  • salt.utils.check_onfail_requisites.Please use salt.utils.state.check_onfail_requisites() instead.
  • salt.utils.check_state_result.Please use salt.utils.state.check_result() instead.
  • salt.utils.get_user.Please use salt.utils.user.get_user() instead.
  • salt.utils.get_uid.Please use salt.utils.user.get_uid() instead.
  • salt.utils.get_specific_user.Please use salt.utils.user.get_specific_user() instead.
  • salt.utils.chugid.Please use salt.utils.user.chugid() instead.
  • salt.utils.chugid_and_umask.Please use salt.utils.user.chugid_and_umask() instead.
  • salt.utils.get_default_group.Please use salt.utils.user.get_default_group() instead.
  • salt.utils.get_group_list.Please use salt.utils.user.get_group_list() instead.
  • salt.utils.get_group_dict.Please use salt.utils.user.get_group_dict() instead.
  • salt.utils.get_gid_list.Please use salt.utils.user.get_gid_list() instead.
  • salt.utils.get_gid.Please use salt.utils.user.get_gid() instead.
  • salt.utils.enable_ctrl_logoff_handler.Please use salt.utils.win_functions.enable_ctrl_logoff_handler() instead.
  • salt.utils.traverse_dict.Please use salt.utils.data.traverse_dict() instead.
  • salt.utils.traverse_dict_and_list.Please use salt.utils.data.traverse_dict_and_list() instead.
  • salt.utils.filter_by.Please use salt.utils.data.filter_by() instead.
  • salt.utils.subdict_match.Please use salt.utils.data.subdict_match() instead.
  • salt.utils.substr_in_list.Please use salt.utils.data.substr_in_list() instead.
  • salt.utils.is_dictlist.Please use salt.utils.data.is_dictlist() instead.
  • salt.utils.repack_dictlist.Please use salt.utils.data.repack_dictlist() instead.
  • salt.utils.compare_dicts.Please use salt.utils.data.compare_dicts() instead.
  • salt.utils.compare_lists.Please use salt.utils.data.compare_lists() instead.
  • salt.utils.decode_dict.Please use salt.utils.data.encode_dict() instead.
  • salt.utils.decode_list.Please use salt.utils.data.encode_list() instead.
  • salt.utils.exactly_n.Please use salt.utils.data.exactly_n() instead.
  • salt.utils.exactly_one.Please use salt.utils.data.exactly_one() instead.
  • salt.utils.is_list.Please use salt.utils.data.is_list() instead.
  • salt.utils.is_iter.Please use salt.utils.data.is_iter() instead.
  • salt.utils.isorted.Please use salt.utils.data.sorted_ignorecase() instead.
  • salt.utils.is_true.Please use salt.utils.data.is_true() instead.
  • salt.utils.mysql_to_dict.Please use salt.utils.data.mysql_to_dict() instead.
  • salt.utils.simple_types_filter.Please use salt.utils.data.simple_types_filter() instead.
  • salt.utils.ip_bracket.Please use salt.utils.zeromq.ip_bracket() instead.
  • salt.utils.gen_mac.Please use salt.utils.network.gen_mac() instead.
  • salt.utils.mac_str_to_bytes.Please use salt.utils.network.mac_str_to_bytes() instead.
  • salt.utils.refresh_dns.Please use salt.utils.network.refresh_dns() instead.
  • salt.utils.dns_check.Please use salt.utils.network.dns_check() instead.
  • salt.utils.get_context.Please use salt.utils.stringutils.get_context() instead.
  • salt.utils.get_master_key.Please use salt.utils.master.get_master_key() instead.
  • salt.utils.get_values_of_matching_keys.Please use salt.utils.master.get_values_of_matching_keys() instead.
  • salt.utils.date_cast.Please use salt.utils.dateutils.date_cast() instead.
  • salt.utils.date_format.Please use salt.utils.dateutils.strftime() instead.
  • salt.utils.total_seconds.Please use salt.utils.dateutils.total_seconds() instead.
  • salt.utils.find_json.Please use salt.utils.json.find_json() instead.
  • salt.utils.import_json.Please use salt.utils.json.import_json() instead.
  • salt.utils.namespaced_function.Please use salt.utils.functools.namespaced_function() instead.
  • salt.utils.alias_function.Please use salt.utils.functools.alias_function() instead.
  • salt.utils.profile_func.Please use salt.utils.profile.profile_func() instead.
  • salt.utils.activate_profile.Please use salt.utils.profile.activate_profile() instead.
  • salt.utils.output_profile.Please use salt.utils.profile.output_profile() instead.

salt.auth.Authorize Class Removal

salt/auth/__init__.py文件中的salt.auth.Authorize类已删除,salt/utils/minions.py文件中的any_auth方法已被删除。 这些方法和类未在Salt代码库内部使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: eclipse-jee-neon-3是一款基于Java的集成开发环境(IDE),它是Eclipse IDE的一个版本。Eclipse IDE是一个广泛使用的开发工具,可以用于开发各种类型的应用程序。 "Eclipse-jee"表示这个版本主要针对Java Enterprise Edition(Java EE)的开发,该平台提供了一组技术和API,用于开发企业级Java应用程序。与传统的Java SE(Java Standard Edition)相比,Java EE提供了更多的功能和工具,以满足企业级应用程序的需求。 "Neon"是Eclipse IDE的开发代号,代表这个版本的发布时间。Neon是Eclipse IDE的第四个主要版本,它于2016年发布。 "Eclipse-jee-neon-3"是基于Neon版本的Java EE开发工具的第三个修订版。这意味着该版本修复了之前版本中存在的一些错误和问题,并且还可能提供了一些新的功能和改进。 使用eclipse-jee-neon-3,开发者可以创建、编辑和调试Java EE应用程序。它提供了许多有用的功能,如自动代码补全、语法高亮显示、调试器、版本控制集成等。此外,它还支持许多其他技术和框架,如Servlet、JSP、EJB、JPA等。 总之,eclipse-jee-neon-3是一个功能强大的Java EE开发工具,可以帮助开发者轻松地构建和调试企业级Java应用程序。 ### 回答2: eclipse-jee-neon-3是一个流行的集成开发环境(IDE),用于开发JavaEE(Java企业版)应用程序。它是Eclipse Foundation开发的,并通过开放源代码方式进行发布。 这个版本的Eclipse-JEE-Neon-3是Eclipse Neon系列的第三个服务版本。Neon是Eclipse的第四个同时发布的版本,专注于提供Java开发工具的最新和最先进的功能和性能。 Eclipse-JEE-Neon-3提供了广泛的功能,以帮助开发者更轻松地构建和调试企业级应用程序。它支持许多JavaEE技术,如Servlets、JavaServer Pages(JSP)、JavaBeans、Enterprise JavaBeans(EJB)、Java Persistence API(JPA)等。它还集成了许多其他的开发工具,如Git、Maven、JUnit等,使开发者能够更加高效地进行版本控制和测试。 Eclipse-JEE-Neon-3还具有插件式的架构,允许开发者根据自己的需求进行定制和扩展。开发者可以安装各种插件来增加不同的功能和工具,以满足他们特定的开发需求。 此外,Eclipse-JEE-Neon-3还具有友好的用户界面,提供了易于使用和导航的功能。开发者可以通过简单的拖放操作来创建和管理项目,轻松地导航代码和资源,方便地查找和修复错误。 总而言之,Eclipse-JEE-Neon-3是一个强大而全面的开发工具,专门用于构建Java企业级应用程序。它提供了丰富的功能和工具,使开发者能够高效地进行开发和调试,并能够满足不同的需求和要求。 ### 回答3: Eclipse-jee-neon-3是一个用于开发Java Enterprise Edition(JEE)应用程序的集成开发环境(IDE)。它是Eclipse IDE的一个版本,专门针对JEE开发进行优化和扩展。 对于Java开发人员来说,Eclipse-jee-neon-3是一个非常有用的工具,它提供了一系列强大的功能特性。其中包括代码编辑器、调试器、编译器、版本控制、自动完成、语法高亮等等。它还支持各种JEE相关的技术和框架,如Servlet、JSP、EJB、JSF等。 通过Eclipse-jee-neon-3,开发人员可以方便地创建JEE项目,并且能够自动为项目生成基本的代码结构。它还提供了一系列工具和插件,用于简化开发过程,如界面设计器、数据库连接器、Web服务器集成等。 除了常规的代码开发功能外,Eclipse-jee-neon-3还提供了一些用于优化代码质量和性能的工具。例如,它可以帮助检测和修复代码中的错误,提供代码建议和重构提示。此外,它还可以进行代码分析和性能测试,并提供相应的报告和建议。 Eclipse-jee-neon-3还支持与其他开发工具和框架的集成。例如,它可以与Maven、Ant、Git等工具进行无缝协作,方便进行项目构建和版本管理。同时,它还可以与常见的应用服务器集成,如Tomcat、WebSphere、JBoss等,方便部署和调试应用程序。 总之,Eclipse-jee-neon-3是一个强大而且功能丰富的开发工具,非常适合开发Java Enterprise Edition应用程序的开发人员使用。通过它,开发人员可以更快速、高效地开发和调试应用程序,提高开发效率和质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值