Ansible cheat sheet » History » Version 23
Jon Goldberg, 11/02/2023 10:11 PM
1 | 1 | Jon Goldberg | {{last_updated_at}} by {{last_updated_by}} |
---|---|---|---|
2 | |||
3 | # Ansible cheat sheet |
||
4 | |||
5 | 3 | Irene Meisel | This page will cover some helpful one-line commands we can execute with Ansible to accomplish various tasks. Always run **git pull** and **git submodule update** before executing these commands. |
6 | 1 | Jon Goldberg | |
7 | 15 | Brienne Kordis | ### Synchronize a non-canonical site with the live site |
8 | 2 | Jon Goldberg | ``` |
9 | 15 | Brienne Kordis | ansible-playbook sync.yml -l mysite.local |
10 | 2 | Jon Goldberg | ``` |
11 | 6 | Jon Goldberg | * This works on test and dev sites. |
12 | * Depending on the sync strategy on the website inventory, it will pull from last night's backup, sync directly from the live site, or use the Pantheon API to make a backup/download. |
||
13 | 1 | Jon Goldberg | * Only sites that pull from backup can sync to a site that's not on your local machine at present (I'll fix this at some point). |
14 | |||
15 | 6 | Jon Goldberg | ### Ad-hoc examples |
16 | 18 | Jon Goldberg | #### Roll back a site to the latest commit (e.g. after a failed merge or failed local update): |
17 | 6 | Jon Goldberg | ```shell |
18 | 14 | Jon Goldberg | ansible --become --become-user="{{ run_as_user }}" -m shell -a 'cd {{civiroot}} && git clean -fd {{civiroot}} && git reset --hard HEAD' mysite1.local,mysite2.local |
19 | 6 | Jon Goldberg | ``` |
20 | |||
21 | 13 | Jon Goldberg | #### Update all dev sites to the latest version of a submodule |
22 | ```shell |
||
23 | ansible --become --become-user="{{ run_as_user }}" -m shell -a 'cd {{webroot}}/{{civicrm_custom_path}}/extensions/com.megaphonetech.monitoring && git checkout master && git pull && cd .. && git add com.megaphonetech.monitoring && git commit -m"Updated monitoring submodule" && git push' 'maintenance_civi:&websites_dev' |
||
24 | ``` |
||
25 | |||
26 | 7 | Jon Goldberg | #### Send a drush command to multiple sites |
27 | This is trickier to handle places where we don't have root, but works. |
||
28 | ```shell |
||
29 | ansible --become --become-user="{{ run_as_user }}" -m shell -a "PATH=\$HOME/bin:\$PATH; drush --root={{ webroot }} pm-disable -y print" 'maintenance_drupal' |
||
30 | ``` |
||
31 | |||
32 | 9 | Jon Goldberg | #### Update a Civi extension only on certain sites |
33 | ```shell |
||
34 | ansible --become --become-user="{{ run_as_user }}" -m shell -a "PATH=\$HOME/bin:\$PATH; cv --cwd={{ webroot }} ext:download --force extendedreport" site1.local,site2.local |
||
35 | ansible --become --become-user="{{ run_as_user }}" -m shell -a "cd {{ webroot }}; git add .; git commit -m'ExtendedReport 5.16'; git push" site1.local,site2.local |
||
36 | ``` |
||
37 | |||
38 | 1 | Jon Goldberg | #### Send an arbitrary SQL statement to all Civi test instances with maintenance contracts |
39 | ```shell |
||
40 | 4 | Jon Goldberg | ansible --become --become-user="{{ run_as_user }}" -m shell -a "PATH=\$HOME/bin:\$PATH; echo \"UPDATE civicrm_job SET is_active = 0 WHERE api_action = 'group_rebuild';\" | cv --cwd={{ webroot }} sql" 'maintenance_civi:&websites_test' |
41 | ```` |
||
42 | 6 | Jon Goldberg | |
43 | 20 | Jon Goldberg | #### |
44 | ``` |
||
45 | # Check Civi version of all dev sites |
||
46 | 1 | Jon Goldberg | ansible --become --become-user="{{ run_as_user }}" -m shell -a "cv --level=cms-full --cwd={{ webroot }} vars:show | grep CIVI_VERSION" 'maintenance_civi:&websites_dev' |
47 | 20 | Jon Goldberg | # Find which dev sites have Shoreditch enabled |
48 | ansible --become --become-user="{{ run_as_user }}" -m shell -a "cv --level=cms-full --cwd={{ webroot }} ext:list --local | grep shoreditch" 'maintenance_civi:&websites_dev' |
||
49 | ``` |
||
50 | 19 | Jon Goldberg | |
51 | 6 | Jon Goldberg | #### Set CLI PHP version across all servers |
52 | This is an example of server-level changes (others are site-level). |
||
53 | ```shell |
||
54 | ansible --become -m command -a 'update-alternatives --set php /usr/bin/php7.4' vps |
||
55 | ``` |
||
56 | 10 | Jon Goldberg | |
57 | 12 | Jon Goldberg | #### Copy a local file to all servers |
58 | ```shell |
||
59 | ansible --become -m copy -a "src=/home/jon/Downloads/goodphp81.php.ini dest=/etc/php/8.1/fpm/php.ini mode=0644 owner=root group=root" lamp |
||
60 | ``` |
||
61 | |||
62 | 10 | Jon Goldberg | ### Run a non-command module across all servers |
63 | ``` |
||
64 | ansible --become -m user -a"name=joseph state=absent remove=yes" vps |
||
65 | ``` |
||
66 | 11 | Jon Goldberg | |
67 | ### Clear templates_c and flush cache on all maintenance servers |
||
68 | ``` |
||
69 | ansible --become -m shell -a "cd {{ webroot }}/wp-content/uploads/civicrm; rm -rf templates_c; cv flush" 'maintenance_civi:&maintenance_wp:&websites_live' |
||
70 | ansible --become -m shell -a "cd {{ webroot }}/sites/default/files/civicrm; rm -rf templates_c; cv flush" 'maintenance_civi:&maintenance_drupal:&websites_live' |
||
71 | ``` |
||
72 | 16 | Brienne Kordis | |
73 | 22 | Jon Goldberg | ### Install an unreleased version of an extension |
74 | ```shell |
||
75 | # Need the key of the extension and the URL of the .zip file as arguments to `--bare`. |
||
76 | ansible --become -m shell -a "cv --cwd={{ webroot }} ext:download --force 'civirules@https://lab.civicrm.org/JonGold/civirules/-/archive/predata-fix-567/civirules-predata-fix-567.zip'" crcl.local |
||
77 | 23 | Jon Goldberg | ansible --become -m shell -a 'cd {{ webroot }} && git add {{ webroot }}/{{ civicrm_custom_path }}/extensions && git commit -m"CiviRules 5.67 fix" && git push' crcl.local |
78 | 22 | Jon Goldberg | ``` |
79 | |||
80 | 16 | Brienne Kordis | ### Push changes to live and/or test sites |
81 | 17 | Brienne Kordis | |
82 | 16 | Brienne Kordis | ```shell |
83 | 21 | Jon Goldberg | ansible-playbook update.yml -l [sitename] |
84 | 1 | Jon Goldberg | # Do two or more sites - no space after the comma |
85 | 21 | Jon Goldberg | ansible-playbook update.yml -l [sitename],[sitename] |
86 | 16 | Brienne Kordis | # Wildcards require the single quotes. I like this approach because it's quicker to type |
87 | 21 | Jon Goldberg | ansible-playbook update.yml -l '[wildcard keyword]*' |
88 | 16 | Brienne Kordis | # Everything together |
89 | 21 | Jon Goldberg | ansible-playbook update.yml -l '[wildcard keyword]*,*[wildcard keyword]*' |
90 | 16 | Brienne Kordis | ``` |