Playbook for create File using Ansible - Printable Version +- Hackonology Forums (https://hackonology.com/forum) +-- Forum: Technology & Configuration (https://hackonology.com/forum/forumdisplay.php?fid=3) +--- Forum: Tools (https://hackonology.com/forum/forumdisplay.php?fid=8) +---- Forum: Devops Tools (https://hackonology.com/forum/forumdisplay.php?fid=28) +----- Forum: Ansible (https://hackonology.com/forum/forumdisplay.php?fid=31) +----- Thread: Playbook for create File using Ansible (/showthread.php?tid=31) |
Playbook for create File using Ansible - SysAdmin - 08-28-2020 Creating an empty file in Ansible
You can Create an empty file using the file module. You just need to set two parmaters.
- hosts: all tasks: - name: Ansible create file if it doesn't exist example file: path: "/Users/mdtutorials2/Documents/Ansible/devops_server.txt" state: touch output ------ -rw-r--r-- 1 root staff 0 Feb 5 12:00 devops_server.txt Creating a new file with content One way is to create an empty file using the above method and then using the blockinfile or lineinfile module to add content to it. But an easier method is to use the Ansible copy module to create a new file with content inside. The copy module is commonly used to copy a source file to a destination file. But there is a parameter ‘content’ which can be used to create a file with the content. Note: If the file already exists then the module would check for the contents of that file. And if the contents are same then nothing happens. But if the content is different then the file will be overwritten. So do not use this on an existing file unless necessary. The following task will create a new file ‘remote_server.txt’ if the file is not present. - hosts: all tasks: - name: Ansible create file with content example copy: dest: "/Users/mdtutorials2/Documents/Ansible/remote_server.txt" content: | dog1 tiger output ------ -rw-r--r-- 1 root wheel 11 Feb 6 08:37 remote_server.txt bash-3.2# cat remote_server.txt dog1 tiger Setting the permissions for a new file From the above examples, you can see the default permission if none are specified. You can specify the permission of the file being created in both cases. Whether using are the copy module or file module you can use the follow parameters to set the permission of the file.
- hosts: all tasks: - name: Ansible create new file with permissions example. file: path: "/Users/mdtutorials2/Documents/Ansible/devops.txt" state: touch mode: 0777 owner: mdtutorials2 output ——- -rwxrwxrwx 1 mdtutorials2 staff 0 Feb 6 08:55 devops.txt Creating multiple new files You can aslso create multiple new files in a sinlge task instead of writing different tasks. You can also set different permissions and mode for each one also. The below 2 examples show both ways. You will be using the with_items module for giving the location of each file. - hosts: all tasks: - name: Ansible create multiple files example file: path: "{{ item }}" state: touch mode: 0775 with_items: - int1.txt - int2.txt - int3.txt - int4.txt -rwxrwxr-x 1 root staff 0 Feb 6 09:14 int1.txt -rwxrwxr-x 1 root staff 0 Feb 6 09:14 int2.txt -rwxrwxr-x 1 root staff 0 Feb 6 09:14 int3.txt -rwxrwxr-x 1 root staff 0 Feb 6 09:14 int4.txt Now in the above case, you can see that all the permission and owners are the same. But what if you need multiple new files, but the attributes to be different. In such case, you can use with_items with dictionaries. And each dictionary will have all the attributes for each file. - hosts: all tasks: - name: Ansible create multiple files example file: path: "{{ item.location }}" state: touch mode: "{{ item.mode }}" with_items: - { location: 'int5.txt',mode: '0566'} - { location: 'int6.txt',mode: '0766'} -r-xrw-rw- 1 root staff 0 Feb 6 09:24 int5.txt -rwxrw-rw- 1 root staff 0 Feb 6 09:24 int6.txt Note: You can set the key in the dictionary to any string as long as you use the same string in the parameter list. |