refactor(packages): directly pipe python script into ansible
This commit is contained in:
parent
8945449613
commit
bc98c00950
4 changed files with 85 additions and 74 deletions
|
@ -1,13 +1,7 @@
|
||||||
|
import argparse
|
||||||
import json
|
import json
|
||||||
import sys
|
import sys
|
||||||
import yaml
|
import yaml
|
||||||
import fileinput
|
|
||||||
|
|
||||||
packages_tree = None
|
|
||||||
yaml_config = ''.join(sys.stdin.readlines())
|
|
||||||
packages_tree = yaml.safe_load(yaml_config)
|
|
||||||
|
|
||||||
assert packages_tree is not None, "Must have load valid package tree"
|
|
||||||
|
|
||||||
def flatten_packages(item):
|
def flatten_packages(item):
|
||||||
packages = []
|
packages = []
|
||||||
|
@ -19,24 +13,46 @@ def flatten_packages(item):
|
||||||
return [flatten_packages(p) for p in item]
|
return [flatten_packages(p) for p in item]
|
||||||
if isinstance(item, dict):
|
if isinstance(item, dict):
|
||||||
packages = []
|
packages = []
|
||||||
for k, v in item.items():
|
for v in item.values():
|
||||||
packages += flatten_packages(v)
|
packages += flatten_packages(v)
|
||||||
return packages
|
return packages
|
||||||
return []
|
return []
|
||||||
|
|
||||||
flat_packages = flatten_packages(packages_tree)
|
def output_packages(packages_tree, aur_filter: bool = False):
|
||||||
|
flat_packages = flatten_packages(packages_tree)
|
||||||
|
|
||||||
native_names = []
|
names = []
|
||||||
aur_names = []
|
for p in flat_packages:
|
||||||
for p in flat_packages:
|
assert isinstance(p, dict)
|
||||||
assert isinstance(p, dict)
|
is_aur = p['name'].startswith('aur/')
|
||||||
if p['name'].startswith('aur/'):
|
if (aur_filter and not is_aur) or (not aur_filter and is_aur):
|
||||||
aur_names.append(p['name'].split('/')[1])
|
continue
|
||||||
continue
|
names.append(
|
||||||
native_names.append(p['name'])
|
p['name'].split('/')[1] if '/' in p['name'] else p['name']
|
||||||
|
)
|
||||||
|
return names
|
||||||
|
|
||||||
print(json.dumps({
|
def cli():
|
||||||
"native": native_names,
|
parser = argparse.ArgumentParser(description='Optional app description')
|
||||||
"aur": aur_names
|
parser.add_argument('categories', type=str, help="Categories to include, all for all")
|
||||||
}))
|
parser.add_argument('--aur', action='store_true', help="Also output AUR packages")
|
||||||
# print(' '.join(names))
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# load data from stdin
|
||||||
|
packages_tree = None
|
||||||
|
yaml_config = ''.join(sys.stdin.readlines())
|
||||||
|
packages_tree = yaml.safe_load(yaml_config)
|
||||||
|
assert packages_tree is not None, "Must have load valid package tree"
|
||||||
|
|
||||||
|
tree: dict = {}
|
||||||
|
if args.categories == 'all':
|
||||||
|
tree = packages_tree
|
||||||
|
else:
|
||||||
|
selected_categories = args.categories.split(',')
|
||||||
|
for category in selected_categories:
|
||||||
|
if category not in packages_tree:
|
||||||
|
continue
|
||||||
|
tree = tree | {category: packages_tree[category]}
|
||||||
|
print(json.dumps(output_packages(tree, args.aur)))
|
||||||
|
|
||||||
|
cli()
|
||||||
|
|
|
@ -9,13 +9,13 @@
|
||||||
when: "not target_is_real"
|
when: "not target_is_real"
|
||||||
block:
|
block:
|
||||||
- copy:
|
- copy:
|
||||||
src: ./vm_files/remote_key
|
src: ./vm_files/remote_key
|
||||||
dest: "{{ home }}/.ssh/{{ device_name }}_generic_ed25519"
|
dest: "{{ home }}/.ssh/{{ device_name }}_generic_ed25519"
|
||||||
mode: u=rw,g=,o=
|
mode: u=rw,g=,o=
|
||||||
- copy:
|
- copy:
|
||||||
src: ./vm_files/remote_key.pub
|
src: ./vm_files/remote_key.pub
|
||||||
dest: "{{ home }}/.ssh/{{ device_name }}_generic_ed25519.pub"
|
dest: "{{ home }}/.ssh/{{ device_name }}_generic_ed25519.pub"
|
||||||
mode: u=rw,g=,o=
|
mode: u=rw,g=,o=
|
||||||
|
|
||||||
- name: Config git
|
- name: Config git
|
||||||
template:
|
template:
|
||||||
|
@ -33,9 +33,6 @@
|
||||||
|
|
||||||
- name: Load organization profile
|
- name: Load organization profile
|
||||||
when: organization is defined and "ssh" in organization_customize
|
when: organization is defined and "ssh" in organization_customize
|
||||||
become: true
|
|
||||||
copy:
|
copy:
|
||||||
src: "{{ home }}/.dots/profiles/{{ organization }}/configs/ssh"
|
src: "{{ home }}/.dots/profiles/{{ organization }}/configs/ssh"
|
||||||
dest: "{{ home }}/.ssh/profiles/{{ organization }}"
|
dest: "{{ home }}/.ssh/profiles/{{ organization }}"
|
||||||
|
|
||||||
template:
|
|
||||||
|
|
|
@ -10,14 +10,6 @@ export ANSIBLE_CONFIG=$base/ansible.cfg
|
||||||
#export ANSIBLE_DEBUG=1
|
#export ANSIBLE_DEBUG=1
|
||||||
export ANSIBLE_LOG_PATH=ansible_run.log
|
export ANSIBLE_LOG_PATH=ansible_run.log
|
||||||
|
|
||||||
cd $base
|
|
||||||
cat arch_packages.yaml | python3 parse_arch_packages.py > arch_packages.json
|
|
||||||
cd $workdir
|
|
||||||
|
|
||||||
cd $base
|
|
||||||
cat pip_packages.yaml | python3 parse_arch_packages.py > pip_packages.json
|
|
||||||
cd $workdir
|
|
||||||
|
|
||||||
rm $base/vm_files
|
rm $base/vm_files
|
||||||
ln -s $workdir $base/vm_files
|
ln -s $workdir $base/vm_files
|
||||||
|
|
||||||
|
|
|
@ -117,11 +117,48 @@
|
||||||
- shell: "rm -rf /etc/pacman.d/gnupg && pacman-key --init && pacman-key --populate archlinux"
|
- shell: "rm -rf /etc/pacman.d/gnupg && pacman-key --init && pacman-key --populate archlinux"
|
||||||
- shell: "mkdir -p {{ home }}/.cache/monakhos; echo -n $(date --iso-8601=d) > {{ home }}/.cache/monakhos/pacman_key_state"
|
- shell: "mkdir -p {{ home }}/.cache/monakhos; echo -n $(date --iso-8601=d) > {{ home }}/.cache/monakhos/pacman_key_state"
|
||||||
|
|
||||||
# INSTALL from YAML
|
# AUR SETUP
|
||||||
- name: Install packages from YAML files (excluding AUR)
|
- name: Create the aur_builder user
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.user:
|
||||||
|
name: aur_builder
|
||||||
|
create_home: yes
|
||||||
|
group: wheel
|
||||||
|
|
||||||
|
- name: Allow the `aur_builder` user to run `sudo pacman` without a password
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.lineinfile:
|
||||||
|
path: /etc/sudoers.d/11-install-aur_builder
|
||||||
|
line: 'aur_builder ALL=(ALL) NOPASSWD: /usr/bin/pacman'
|
||||||
|
create: yes
|
||||||
|
mode: 0644
|
||||||
|
validate: 'visudo -cf %s'
|
||||||
|
|
||||||
|
- name: Install yay
|
||||||
|
include_role:
|
||||||
|
name: aur
|
||||||
|
vars:
|
||||||
|
packages:
|
||||||
|
- yay-bin
|
||||||
|
|
||||||
|
- name: Stub
|
||||||
|
file:
|
||||||
|
path: "{{ home }}/.stub"
|
||||||
|
state: touch
|
||||||
|
|
||||||
|
# INSTALL normal packages from YAML
|
||||||
|
- name: Install non-AUR packages
|
||||||
become: true
|
become: true
|
||||||
community.general.pacman:
|
community.general.pacman:
|
||||||
name: "{{ (lookup('file', 'arch_packages.json') | from_json)['native'] }}" # the python script will return a list of packages
|
name: "{{ lookup('pipe', ('cat arch_packages.yaml | python3 parse_arch_packages.py ' + item)) | from_json }}"
|
||||||
|
with_items: "{{ packages_categories }}"
|
||||||
|
|
||||||
|
- name: Install AUR packages
|
||||||
|
include_role:
|
||||||
|
name: aur
|
||||||
|
vars:
|
||||||
|
packages: "{{ lookup('pipe', ('cat arch_packages.yaml | python3 parse_arch_packages.py --aur ' + item)) | from_json }}"
|
||||||
|
with_items: "{{ packages_categories }}"
|
||||||
|
|
||||||
- name: Install sway
|
- name: Install sway
|
||||||
include_role:
|
include_role:
|
||||||
|
@ -175,41 +212,10 @@
|
||||||
src: fish/machine.fish
|
src: fish/machine.fish
|
||||||
dest: "{{ home }}/.config/fish/machine.fish"
|
dest: "{{ home }}/.config/fish/machine.fish"
|
||||||
|
|
||||||
- name: Create the aur_builder user
|
|
||||||
become: yes
|
|
||||||
ansible.builtin.user:
|
|
||||||
name: aur_builder
|
|
||||||
create_home: yes
|
|
||||||
group: wheel
|
|
||||||
|
|
||||||
- name: Allow the `aur_builder` user to run `sudo pacman` without a password
|
|
||||||
become: yes
|
|
||||||
ansible.builtin.lineinfile:
|
|
||||||
path: /etc/sudoers.d/11-install-aur_builder
|
|
||||||
line: 'aur_builder ALL=(ALL) NOPASSWD: /usr/bin/pacman'
|
|
||||||
create: yes
|
|
||||||
mode: 0644
|
|
||||||
validate: 'visudo -cf %s'
|
|
||||||
|
|
||||||
- name: Setup xremap
|
- name: Setup xremap
|
||||||
include_role:
|
include_role:
|
||||||
name: xremap
|
name: xremap
|
||||||
|
|
||||||
# AUR packages
|
|
||||||
- name: Install yay
|
|
||||||
import_role:
|
|
||||||
name: aur
|
|
||||||
vars:
|
|
||||||
packages:
|
|
||||||
- yay-bin
|
|
||||||
|
|
||||||
- name: Install AUR packages from YAML file
|
|
||||||
become: true
|
|
||||||
import_role:
|
|
||||||
name: aur
|
|
||||||
vars:
|
|
||||||
packages: "{{ (lookup('file', 'arch_packages.json') | from_json)['aur'] }}"
|
|
||||||
|
|
||||||
# SYSTEMD user services
|
# SYSTEMD user services
|
||||||
- name: Setup systemd user services folder
|
- name: Setup systemd user services folder
|
||||||
file:
|
file:
|
||||||
|
@ -315,7 +321,7 @@
|
||||||
- name: Install pip packages
|
- name: Install pip packages
|
||||||
community.general.pipx:
|
community.general.pipx:
|
||||||
name: "{{ item }}"
|
name: "{{ item }}"
|
||||||
loop: "{{ (lookup('file', 'pip_packages.json') | from_json)['native'] }}"
|
with_items: "{{ lookup('pipe', 'cat pip_packages.yaml | python3 parse_arch_packages.py all') | from_json }}"
|
||||||
|
|
||||||
- name: Enable bluetooth service
|
- name: Enable bluetooth service
|
||||||
become: true
|
become: true
|
||||||
|
|
Loading…
Reference in a new issue