ansible基础命令

基础ansible命令

ansible采用ssh的方式操作远程机器,首先我们需要在ansible所在机器创建一个hosts文件记录要操作机器的ip。

[root@vm1 ansible-test]# cat hosts 
[master]
192.168.178.129

[node]
192.168.178.130

# 设置k8s组包含这俩组
[k8s:children]
master
node

# 设置组中每个ip包含的变量
# 本例中设置了ssh的用户名密码
[k8s:vars]
ansible_ssh_user=root
ansible_ssh_pass=1234

[master][node]是为一组ip起的名字,同时它们属于[k8s]组。
然后尝试命令:

[root@vm1 ansible-test]# ansible -i hosts all -m ping

其中,-i指定了hosts文件,all指的是操作目标为hosts中的所有组,也可以写node就只操作node组的ip了,-m指定模块,本例是ping模块,即执行ping命令。
继续尝试命令:

[root@vm1 ansible-test]# ansible -i hosts all -a "ls"

该命令让目标机器执行ls命令。

以上这些只能一次命令执行一个操作,下面介绍ansible-playbook命令,可以一次命令执行多个操作。

ansible-playbook

创建一个play-test.yml 文件,内容如下:

[root@vm1 ansible-test]# cat play-test.yml 
- name: say 'hello world'
  hosts: all
  tasks:
    - name: echo 'hello world'
      command: echo 'hello world'
      register: result

    - name: print stdout
      debug: var=result.stdout

其中,tasks可以包含多个操作,这里第一个操作是输出hello world字符,通过register将命令echo 'hello world'的输出结果记录到了变量result中。第二个命令是将变量result打印出来,不然命令输出结果是不显示的。
执行该脚本:

[root@vm1 ansible-test]# ansible-playbook -i hosts play-test.yml 

roles

当我们需要操作的机器越来越多,执行的命令也越来越多,为了方便管理和增强复用性,可以使用roles。

[root@vm1 ansible-test]# mkdir roles && cd roles
[root@vm1 roles]# ansible-galaxy init test-role
- test-role was created successfully
[root@vm1 roles]# tree .
.
└── test-role
    ├── defaults
    │   └── main.yml
    ├── files
    ├── handlers
    │   └── main.yml
    ├── meta
    │   └── main.yml
    ├── README.md
    ├── tasks
    │   └── main.yml
    ├── templates
    ├── tests
    │   ├── inventory
    │   └── test.yml
    └── vars
        └── main.yml

9 directories, 8 files

roles目录下可以包含多个我们创建的role,各个role去做各自的操作方便管理,这里用了ansible-galaxy init test-role直接初始化了一个名为test-role的role,目录结构含义可以百度,这里关心tasks里的main.yml即可,它是整个role的主入口,修改它的内容:

[root@vm1 ansible-test]# cat roles/test-role/tasks/main.yml 
# shell module可以执行shell命令
- name: shell command
  shell: ls -a /home

# copy module类似scp命令,传文件
- name: copy file, like scp
  copy:
    src: /home/test.yml
    dest: /tmp/test/
    owner: root
    group: root
    mode: 0644

# file module可以创建或者修改文件/文件夹属性
- name: mkdir
  file: 
    path: /tmp/file-mkdir-test
    state: directory
    owner: root
    group: root
    mode: 0700

# service module类似service命令,管理服务
- name: stop firewall
  service: 
    name: firewalld 
    state: stopped 
    enabled: no

# lineinfile module可以Manage lines in text files
# 在/etc/hosts文件里用"hahaha"取代开头为"666.666"的一行。
- name: set 666.666 as hahaha
  lineinfile:
    dest: /etc/hosts
    regexp: '^666\.666'
    line: 'hahaha'

各个操作都有name,以及对应的模块的关键字。
roles目录的同级创建文件play-role-test.yml,内容如下:

[root@vm1 ansible-test]# cat play-role-test.yml 
- hosts: node
  roles:
    - test-role

该文件指定了操作对象为hosts文件中的node组,使用的role是test-role
然后执行即可:

[root@vm1 ansible-test]# ansible-playbook -i hosts play-role-test.yml 

你可能感兴趣的:(Linux)