ansible -i /etc/ansible/hosts weiyifan -m shell "mkdir -p /home/weiyifan/1/2/3/4/" 为什么我这行代码还是输出了ansible: error: unrecognized arguments: mkdir -p /home/weiyifan/1/2/3/4/ 这个错误
时间: 2023-08-01 08:13:39 浏览: 179
根据你提供的命令和错误信息,我注意到问题可能出在`weiyifan`参数上。在ansible命令中,主机清单文件应该是`-i`选项的参数,而不是执行命令的目标主机。尝试将命令修改为以下形式:
```
ansible -i /etc/ansible/hosts all -m shell -a "mkdir -p /home/weiyifan/1/2/3/4/"
```
这个命令中的`all`表示对主机清单文件中的所有主机执行任务。`-m shell`指定了要执行的模块为shell模块。`-a`选项后面是要在远程主机上执行的具体命令。
请确保在命令中指定了正确的主机清单文件路径`/etc/ansible/hosts`,并替换为你实际使用的文件路径。
相关问题
通过http服务中的ansible.zip软件包和https-repo.tar.gz,在ansible节点安装ansible服务;并用这台母机,编写ansible脚本(在/root目录下创建ansible_http目录作为ansible工作目录,部署的入口文件命名为install_http.yaml)。install_http.yaml文件中需要完成的内容为 (1)yaml中被执行节点为node1,执行者为root; (2)使用copy模块将ansible节点的local.repo传到node节点;(local.repo用于配置node节点的yum源,可自行创建) (3)使用yum模块安装http服务; (4)用shell模块验证是否部署成功 (5)使用service模块启动http服务,设置开机自启动 (6)把本地的Index.html文件到httpd的html目录
以下是一个示例的 Ansible playbook,可以实现在目标节点 node1 上安装 Http 服务、配置 yum 源、启动 Http 服务,并将本地的 Index.html 文件复制到 Http 服务的 html 目录下。
1. 将 ansible.zip 和 https-repo.tar.gz 文件上传到 ansible 节点的 /root 目录下
2. 在 /root 目录下创建 ansible_http 目录作为工作目录:
```
mkdir /root/ansible_http
```
3. 在 /root/ansible_http 目录下创建 install_http.yaml 文件,并写入以下内容:
```yaml
---
- name: Deploy Http service
hosts: node1
remote_user: root
tasks:
- name: Copy local.repo to node1
copy:
src: /root/local.repo
dest: /etc/yum.repos.d/local.repo
- name: Install Http service
yum:
name: httpd
state: present
- name: Verify Http service
shell: curl http://localhost/
register: http_output
- name: Start Http service
service:
name: httpd
state: started
enabled: yes
- name: Copy Index.html to Http service root
copy:
src: /root/Index.html
dest: /var/www/html/
```
在这个 playbook 中,我们定义了以下任务:
1. 将 /root/local.repo 文件复制到 node1 机器的 /etc/yum.repos.d/local.repo 目录下,用于配置 node1 的 yum 源。
2. 使用 yum 模块安装 Http 服务。
3. 使用 shell 模块执行 curl 命令,验证 Http 服务是否成功安装。
4. 使用 service 模块启动 Http 服务,并设置开机自启动。
5. 将 /root/Index.html 文件复制到 Http 服务的默认根目录 /var/www/html/ 下。
4. 执行以下命令部署 Http 服务:
```
ansible-playbook -i "node1," /root/ansible_http/install_http.yaml
```
其中,"node1," 表示只部署在 node1 机器上,逗号不能省略。
acontos7.9 环境上 部署安装 一台master 3台node 的k8s集群, 创建免密登录 然后使用ansible 编写一键部署shell
为了在 CentOS 7.9 环境上部署一台 Master 节点和三台 Node 节点的 Kubernetes 集群,并实现免密登录,可以按照以下步骤操作:
**前提条件:**
1. 确保你已经安装了 Ansible 工具。
2. 你已经在所有节点上设置了免密登录,可以使用 SSH 免密登录到每个节点。
**步骤:**
1. 创建一个新的目录用于存放 Ansible 相关文件:
```shell
$ mkdir k8s-deployment
$ cd k8s-deployment
```
2. 创建一个名为 `hosts` 的文件,用于定义主机和节点信息:
```shell
$ vi hosts
```
在文件中添加以下内容(替换 `<master-ip>` 和 `<node-ip>` 为实际的 IP 地址):
```
[master]
<master-ip>
[nodes]
<node-ip1>
<node-ip2>
<node-ip3>
```
3. 创建一个名为 `playbook.yml` 的 Ansible Playbook 文件,用于定义部署任务:
```shell
$ vi playbook.yml
```
在文件中添加以下内容:
```yaml
---
- hosts: all
become: true
tasks:
- name: Install Docker
yum:
name: docker
state: present
- name: Start Docker service
service:
name: docker
state: started
- name: Install kubeadm, kubelet, kubectl
yum:
name:
- kubeadm
- kubelet
- kubectl
state: present
- name: Enable and start kubelet service
service:
name: kubelet
state: started
enabled: true
- name: Initialize Kubernetes master
command: kubeadm init --pod-network-cidr=10.244.0.0/16
args:
creates: /etc/kubernetes/admin.conf
register: join_command
when: "'master' in group_names"
- name: Save join command to file
copy:
content: "{{ join_command.stdout_lines[0] }}"
dest: /tmp/join-command.txt
when: "'master' in group_names"
- name: Copy Kubernetes admin.conf for local user
copy:
src: /etc/kubernetes/admin.conf
dest: $HOME/.kube/config
remote_src: true
when: "'master' in group_names"
- name: Install Calico network plugin
command: kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
args:
creates: /etc/kubernetes/manifests/calico.yaml
when: "'master' in group_names"
```
4. 运行 Playbook 执行部署任务:
```shell
$ ansible-playbook -i hosts playbook.yml
```
完成上述步骤后,应该已经成功部署了一台 Master 节点和三台 Node 节点的 Kubernetes 集群,并实现了免密登录。请注意,上述 Playbook 只提供了一个简单的示例,实际操作可能需要根据你的环境和需求进行适当的调整。
阅读全文