원격 노드에서 로컬 스크립트를 실행하기 위해 salt-ssh를 어떻게 얻을 수 있습니까?

원격 노드에서 로컬 스크립트를 실행하기 위해 salt-ssh를 어떻게 얻을 수 있습니까?

.::업데이트 해결됨::.

@wirap 양식의 필수 지원을 통해 현재 작동 중입니다. 나는 스크립트 디렉토리를 심볼릭 링크했고 /etc/salt/states/scriptstest.sls구성을 사용하여 현재 작동하고 있습니다.

/root/bin/updater/scripts/pam-setup-access:
    file.managed:
      - name: /tmp/pam-setup-access
      - source: salt://scripts/pam-setup-access
      - mode: 0700
run_script:
   cmd.run:
      - name: /tmp/pam-setup-access
   file.absent:
      - name: /tmp/pam-setup-access

저는 salt-ssh를 처음 접했고 몇 가지 정보를 보고 있습니다.여기/root/bin/updater/scripts/pam-setup-access루트 액세스 권한이 있는 원격 노드의 관리 상자( )에 있는 스크립트를 실행하는 방법에 대해 설명합니다 .

파일(아래) 을 만들었지 state만 어디에 두어야 할지 잘 모르겠습니다. 소금-ssh문서언급만 /etc/salt/master해서 찾아봤는데그 문서방랑자 및 패키지 설치에 특정한 것 같습니다.

add script:
    file.managed:
    - name: pam-setup-access
    - source: /root/bin/updater/scripts/pam-setup-access

run script:
    cmd.run:
    - name: pam-setup-access

마지막으로 첫 번째 링크에 표시된 대로 현재 디렉터리에서 상태 파일을 간단히 실행해 보았으나 짜증만 났습니다. 내가 무엇을 놓치고 있나요?

# salt-ssh '*' state.apply test.sls 
nod0:
    [CRITICAL] Unable to import msgpack or msgpack_pure python modules
    Function state.apply is not available

nod1:
    [CRITICAL] Unable to import msgpack or msgpack_pure python modules
    Function state.apply is not available

.:: 업데이트 ::.

여러 "하수인"이 마스터(DMZ)와 별도의 네트워크에 상주하므로 salt-ssh를 사용해야 합니다. 내가 이해한 대로, 전통적인 솔트 설정에서는 미니언이 솔트 마스터에 연결되어야 합니다.

게시 이후 다음에서 salt-ssh를 설치했습니다.솔트스택 레포위의 오류를 제거한 것 같습니다 msgpack. 또한 위 의 vagrant 특정 링크에서 일부 예제 master를 수정하여 . 아래에 상태 파일(위)을 배치했습니다 . 결과는 아래와 같습니다.states/etc/salt/etc/salt/states/test.sls

@wirap이 제안한 대로 add script와 사이에 밑줄을 추가했습니다 . run script이것은 아래와 같이 나를 더욱 발전시켰습니다. 클라이언트나 서버의 스크립트 경로와 관련된 오류가 있는 것 같습니다. 아직 확실하지 않습니다. .sls 확장자 없이 파일 state.apply이름만 사용 하여 호출해야 하는 것 같습니다 ..sls

/etc/salt/마스터:

file_roots:
   base:
      - /etc/salt/states

지금 salt-ssh를 시작하면 다음을 얻습니다.

# salt-ssh '*' state.apply test
nod0:
----------
          ID: add_script
    Function: file.managed
        Name: pam-setup-access
      Result: False
     Comment: Specified file pam-setup-access is not an absolute path
     Started: 11:53:50.237379
    Duration: 0.602 ms
     Changes:   
----------
          ID: run_script
    Function: cmd.run
        Name: pam-setup-access
      Result: False
     Comment: Command "pam-setup-access" run
     Started: 11:53:50.238629
    Duration: 8.297 ms
     Changes:   
              ----------
              pid:
                  1037
              retcode:
                  127
              stderr:
                  /bin/bash: pam-setup-access: command not found
              stdout:

Summary for nod0
------------
Succeeded: 0 (changed=1)
Failed:    2
------------
Total states run:     2
Total run time:   8.899 ms
nod1:
----------
          ID: add_script
    Function: file.managed
        Name: pam-setup-access
      Result: False
     Comment: Specified file pam-setup-access is not an absolute path
     Started: 11:53:50.476743
    Duration: 0.555 ms
     Changes:   
----------
          ID: run_script
    Function: cmd.run
        Name: pam-setup-access
      Result: False
     Comment: Command "pam-setup-access" run
     Started: 11:53:50.477906
    Duration: 7.5 ms
     Changes:   
              ----------
              pid:
                  30772
              retcode:
                  127
              stderr:
                  /bin/bash: pam-setup-access: command not found
              stdout:

Summary for nod1
------------
Succeeded: 0 (changed=1)
Failed:    2
------------
Total states run:     2
Total run time:   8.055 ms

답변1

  1. 정말로 salt-ssh("salt-minion을 설치하지 않고 ssh를 통해 salt 명령 및 상태를 실행하십시오.")를 사용하시겠습니까? 미니언에 salt-minion을 설치할 수 없는 경우에만 이 방법으로 수행하면 됩니다.
  2. 상태를 어디에 두었나요? 일반적으로 /etc/salt/master 구성에서 다음을 작성합니다.상태 파일이 있어야 하는 경로
  3. 예제에 제공된 상태를 그대로 사용하지 마십시오. 나는 당신이 공간을 가질 수 없다고 확신합니다아이디 선언( add script:).
  4. 귀하의 오류 메시지는 나에게 알려지지 않았습니다. 이 스레드여기다음과 같은 제안을 합니다."msgpack 오류는 전혀 관련이 없기 때문에 매우 오해의 소지가 있습니다. server.conf 파일 중 하나가 한 미니언에 잘못된 utf-8을 가지고 있고 다른 미니언에는 파일이 존재하지 않는 것 같습니다."나는 귀하의 주 ID에 공백 (' ')이 있다고 강력히 의심합니다. 내 경험에 따르면 상태 파일이나 기둥에 잘못된 문자가 있는 경우 SaltStack은 오해의 소지가 있는 오류 메시지를 내보낼 수 있습니다.

추가 힌트:

  • 바라보다여기상태 트리를 설정하는 방법에 대한 자세한 내용은
  • 어쩌면 작동 방식을 배우기 위해 이미 작동하고 있는 사전 설치된 SaltStack(docker, Vagrant ?)을 사용할 수도 있습니다. UtahDave는 SaltStack에서 꽤 활발하게 활동하고 있으므로 저는 그의데모(면책조항: 직접 테스트하지 않았습니다!)

업데이트: file.managed를 사용하는 경우:

  • 매개변수 sourcefile.managed대상이 아닌 마스터의 경로(상태 경로에 상대적)입니다.
  • 대상에 경로를 지정해야 하기 때문에 오류가 발생합니다."지정된 파일 pam-setup-access는 절대 경로가 아닙니다."

예:

/root/bin/updater/scripts/pam-setup-access
   file.managed:
     - source: salt://files/pam-setup-access

와 같다:

some-arbitrary-id
    file.managed:
    - name: /root/bin/updater/scripts/pam-setup-access
    - source: salt://files/pam-setup-access

https://docs.saltstack.com/en/develop/ref/states/all/salt.states.file.html#module-salt.states.file

cmd.run도 마찬가지입니다.

읽기일반적인솔트스택 튜토리얼. 상태를 디자인할 때 salt-ssh를 사용하든지 salt를 사용하든 상관없습니다. 이것이 당신을 혼란스럽게 하지 않도록 하세요.

관련 정보