Skip to content

Latest commit

 

History

History
104 lines (78 loc) · 4.36 KB

07-4.Extending-external-sls-and-failhard-global-option.md

File metadata and controls

104 lines (78 loc) · 4.36 KB

Extending External SLS Data - 使用外部的SLS扩展文件

有时,需要通过对一个单独的SLS文件的修改来更新另一个SLS文件中定义的状态。 一个很好的例子是需要覆盖参数或服务需要监视其他状态的时候。

The Extend Declaration - 扩展声明

扩展的标准方法是使用扩展声明。 扩展声明是诸如include之类的顶级声明,并封装了其他SLS文件中包含的ID声明数据。 标准扩展看起来像下面这样:

include:
  - http
  - ssh

extend:
  apache:
    file:
      - name: /etc/httpd/conf/httpd.conf
      - source: salt://http/httpd2.conf
  ssh-server:
    service:
      - watch:
        - file: /etc/ssh/banner

/etc/ssh/banner:
  file.managed:
    - source: salt://ssh/banner

这里发生了一些重要的事情,首先include了将要扩展的SLS文件,然后定义了扩展内容。 在扩展内容部分下,apache ID的文件状态被新名称和源所覆盖。 然后,又将ssh服务扩展为增加监视banner文件。

Extend is a Top Level Declaration - Extend是一个最高级别的声明

这意味着扩展只能在sls中被调用一次,如果扩展被使用了两次,则仅有扩展块之一将被读取。 所以下面这个例子中的使用方法就是错误的:

include:
  - http
  - ssh

extend:
  apache:
    file:
      - name: /etc/httpd/conf/httpd.conf
      - source: salt://http/httpd2.conf
# Second extend will overwrite the first!! Only make one
extend:
  ssh-server:
    service:
      - watch:
        - file: /etc/ssh/banner

The Requisite "in" Statement - 在声明中使用的依赖性管理

由于扩展另一个SLS时最常做的事情之一就是为要监视的服务添加状态,或者为观察者添加任何内容,因此0.9.8中已添加in语句中的必要条件,以使扩展观察范围和依赖要求列表更容易 。 上面的ssh-server extend语句可以更清晰地定义为:

include:
  - ssh

/etc/ssh/banner:
  file.managed:
    - source: salt://ssh/banner
    - watch_in:
      - service: ssh-server

Rules to Extend By - 扩展的使用法则

扩展状态时要记住一些规则:

  1. 始终通过include包含声明扩展的SLS
  2. 必要性依赖(watch和require)附加到其他内容时,其他内容均被覆盖
  3. 扩展是顶级声明,就像ID声明一样,不能在单个SLS中声明两次
  4. 可以在扩展声明下扩展许多ID

Failhard Global Option - 硬失败的全局选项设置

通常,当状态失败时,Salt继续执行其余已定义状态,并且只会拒绝执行需要依赖于失败状态的状态。

但是这种情况可能存在,如果单个状态执行失败,您希望所有状态执行都停止。 执行此操作的能力称为“failing hard”。

state级别的Failhard设置

单个状态上可以设置一个failhard配置项,这意味着如果该单个状态失败,则所有状态的执行将立即停止。 如果存在一个设置关键配置文件的状态,并且为读取配置的每个状态设置一个需求会很麻烦,那么这是一件很棒的事情。 一个很好的例子是尽早设置软件包管理器的状态管理:

/etc/yum.repos.d/company.repo:
  file.managed:
    - source: salt://company/yumrepo.conf
    - user: root
    - group: root
    - mode: 644
    - order: 1
    - failhard: True

在这种情况下,将在其他状态之前配置yum存储库,如果无法放置配置文件,则不会执行任何其他状态。 通过在状态中将failhard显式设置为False,可以覆盖Global Failhard的全局设置。

Global Failhard - 全局Failhard设置

如果希望对执行的每个状态都应用Failhard设置,这种情况,则可以在master配置文件中设置failhard。在master服务器配置文件中设置failhard会导致所有受管理的minions在发生一个状态失败时直接引发状态执行的硬失败。

这不是默认行为,通常Salt只会将那些需要失败状态的状态进行处理。

通常不建议使用全局性的Failhard设置,因为它可能导致状态无法执行甚至无法通过检查。 如果管理员没有主动意识到已经设置了failhard,则看到状态为失败时也会令人困惑。

要使用全局failhard,请在master配置文件中将failhard设置为True。