Ansible local_action 示例它是如何工作的

kam*_*mal 4 ansible

以下 Ansible 游戏如何工作:

- name: Generate join command
    command: kubeadm token create --print-join-command
    register: join_command

  - name: Copy join command to local file
    local_action: copy content="{{ join_command.stdout_lines[0] }}" dest="./join-command"
Run Code Online (Sandbox Code Playgroud)

据我了解,local_action 与 delegate_to 相同,但是 copy content= 没有任何意义。是不是需要指定像“cp”这样的实际命令?

拿这个例子: local_action: command ping -c 1 {{ inventory_hostname }}

我们可以使用这样的东西:

local_action: command cp content="{{ join_command.stdout_lines[0] }}" dest="./join-command"

lar*_*sks 12

据我了解,local_action 与 delegate_to 相同...

local_action类似于delegate_to: localhost,但因为local_action需要您更改任务的语法,所以最好始终使用delegate_to. 也就是说,对于标准任务,您可以编写:

- name: copy a file
  copy:
    src: myfile
    dest: /path/to/myfile
Run Code Online (Sandbox Code Playgroud)

对于委托的任务,您将使用完全相同的语法并添加以下delegate_to行:

- name: copy a file
  delegate_to: localhost
  copy:
    src: myfile
    dest: /path/to/myfile
Run Code Online (Sandbox Code Playgroud)

使用时,local_action您必须更改任务的语法:

- name: copy a file
  local_action:
    module: copy
    src: myfile
    dest: /path/to/myfile
Run Code Online (Sandbox Code Playgroud)

复制内容= 没有任何意义。是不是需要指定像“cp”这样的实际命令?

不,copy是 ansible 模块的名称。你可以看到上面的一些例子,或者只是看看文档

所以看一个例子: local_action: command ping -c 1 {{inventory_hostname }} 我们可以说:

local_action: command cp content="{{ join_command.stdout_lines[0] }}" dest="./join-command"

你应该使用delegate_to,你应该这样写:

- delegate_to: localhost
  copy:
    content: "{{ join_command.stdout_lines[0] }}"
    dest: ./join-command
Run Code Online (Sandbox Code Playgroud)

或者,如果您真的想运行cp命令而不是copy模块,您可以编写如下内容:

- delegate_to: localhost
  command: cp some_file another_file
Run Code Online (Sandbox Code Playgroud)

那只是运行标准cp命令,它对content=or一无所知dest=